Django管理表单:AttributeError XForm对象没有属性“save_m2m”

2024-09-30 20:18:09 发布

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

我试图为一个模型创建一个自定义表单,在Django中有一个额外的字段,但是当我试图提交表单时,我得到了以下错误:

AttributeError: 'UnitForm' object has no attribute 'save_m2m'

这特别奇怪,因为我没有一个名为UnitForm的表单。在

我的forms.py看起来像

class UnitAdminForm(forms.ModelForm):
    time_changed = forms.SplitDateTimeField(widget=widgets.AdminSplitDateTime)

    class Meta:
        model = Unit
        fields = ['status','time_changed']

    def save(self, commit=True):
        changed_at = self.cleaned_data.get('time_changed', None)
        self.instance.status = self.cleaned_data['status']
        self.instance.save(changed_at=changed_at) #the changed_at part is handled on the model
        super(UnitAdminForm, self).save()
        return self.instance

我的admin.py看起来像:

^{pr2}$

似乎管理员正在创建一个新的类(UnitForm),它是我提供的类的子类,但是我仍然不确定为什么这个save_m2m方法不存在,或者我应该如何正确地修复这个错误。在


Tags: instancepyself表单timesavestatus错误
2条回答

我遇到了同样的问题,我通过调用super()成功地解决了这个问题,如下所示:

class UnitAdminForm(forms.ModelForm):
    time_changed = forms.SplitDateTimeField(widget=widgets.AdminSplitDateTime)

    class Meta:
        model = Unit
        fields = ['status','time_changed']

    def save(self, commit=True):
        self.instance.status = self.cleaned_data['status']
        self.instance.changed_at = self.cleaned_data['time_changed']
        # dont call the .save() here
        # self.instance.save(changed_at=changed_at)

        # change return statement to this
        return super().save(commit=commit)

我希望这有帮助

您没有UnitForm,但在UnitAdmin中声明了一个。尝试将to-UnitAdmin类更改为:

class UnitAdmin(admin.ModelAdmin):
     form = UnitAdminForm
     list_display = ('__unicode__','status')
admin.site.register(Unit, UnitAdmin)

编辑:好的,我猜您的问题是您手动保存而忘记从django docs about save()调用save_m2m():

To work around this problem, every time you save a form using commit=False, Django adds a save_m2m() method to your ModelForm subclass. After you’ve manually saved the instance produced by the form, you can invoke save_m2m() to save the many-to-many form data.

相关问题 更多 >