Django 1.8 Admin Form:AttributeError XForm对象没有属性' save_m2m'

时间:2016-01-08 00:19:25

标签: python django django-forms django-admin

我试图为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看起来像:

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

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

2 个答案:

答案 0 :(得分:1)

您没有UnitForm,但在UnitAdmin中声明了一个class UnitAdmin(admin.ModelAdmin): form = UnitAdminForm list_display = ('__unicode__','status') admin.site.register(Unit, UnitAdmin) 。尝试将UnitAdmin类更改为:

{{1}}

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

  

要解决此问题,每次使用commit = False保存表单时,Django都会向您的ModelForm子类添加save_m2m()方法。手动保存表单生成的实例后,可以调用save_m2m()来保存多对多表单数据。

答案 1 :(得分:0)

我遇到了同样的问题,我设法通过调用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)

我希望这对您有帮助