更改未保存在Django admin changelist vi中

2024-07-02 13:26:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模特和另一个有很多关系。我按照https://gist.github.com/jdklub/9261959中的示例从changelist视图使manytomy字段可编辑。但是,当我进行更改时,实际上只保存了对manytomy字段的更改。在

管理员py

class HostChangeList(ChangeList):
    def __init__(self, request, model, list_display, list_display_links,
        list_filter, date_hierarchy, search_fields, list_select_related,
        list_per_page, list_max_show_all, list_editable, model_admin):

    super(HostChangeList, self).__init__(request, model, list_display, list_display_links,
        list_filter, date_hierarchy, search_fields, list_select_related,
        list_per_page, list_max_show_all, list_editable, model_admin)

    self.list_display = ('action_checkbox', 'name', 'ip', 'fagroup', 'description', 'customer_facing', 'monitored', 'puppet', 'sso')
    self.list_editable = ['fagroup', 'description', 'customer_facing', 'monitored', 'puppet', 'sso']
    self.list_display_links = ['name']

class HostForm(forms.ModelForm):
    fagroup = forms.ModelMultipleChoiceField(queryset=FAgroup.objects.all(),widget=forms.SelectMultiple(attrs={'size': '10'}),required=False)
    description = forms.CharField(required=False)
    customer_facing = forms.NullBooleanField()
    monitored = forms.NullBooleanField()
    puppet = forms.NullBooleanField()
    sso = forms.NullBooleanField()

class HostAdmin(admin.ModelAdmin):
    def get_changelist(self, request, **kwargs):
        return HostChangeList

    def get_changelist_form(self, request, **kwargs):
        return HostForm

模型.py

^{pr2}$

我甚至尝试从ModelForm和ChangeList中删除对manytomy字段的所有引用,但是没有一个字段保存。它不会给出任何错误,并给出记录已保存的消息,但没有任何更改持续存在。在


Tags: selfmodelrequestdefdisplayformslinksall
1条回答
网友
1楼 · 发布于 2024-07-02 13:26:37

我不确定这是否是解决这个问题的正确方法,但是我能够通过重写HostAdmin类的内置save函数来保存它。希望这对其他人看到类似问题有帮助。在

class HostAdmin(admin.ModelAdmin):
    search_fields = ('name', 'ip', 'fagroup__name')
    list_filter = ('fagroup', 'customer_facing', 'monitored', 'puppet', 'sso')
    actions_on_bottom = True

    def get_changelist(self, request, **kwargs):
        return HostChangeList

    def get_changelist_form(self, request, **kwargs):
        return HostForm

    def save_model(self, request, obj, form, change):

        if form.cleaned_data['fagroup'] != obj.fagroup:
            obj.fagroup = form.cleaned_data['fagroup']
        if form.cleaned_data['description'] != obj.description:
            obj.description = form.cleaned_data['description']
        if form.cleaned_data['customer_facing'] != obj.customer_facing:
            obj.customer_facing = form.cleaned_data['customer_facing']
        if form.cleaned_data['monitored'] != obj.monitored:
            obj.monitored = form.cleaned_data['monitored']
        if form.cleaned_data['puppet'] != obj.puppet:
            obj.puppet = form.cleaned_data['puppet']
        if form.cleaned_data['sso'] != obj.sso:
            obj.sso = form.cleaned_data['sso']

        obj.save()

相关问题 更多 >