Django 重写ModelAdmin.save_model()和ModelForm.save()时出现问题
我希望重写ModelForm的save()函数,以便在用户按下特定的提交按钮时更新模型上的字段。我还想检查一些其他字段并更新它们的值,我已经在ModelAdmin的save_model()函数中完成了这项工作。但是,正在为对象传递save_model()函数。如果我注释掉表单的save()函数,那么save_model()函数将按预期工作 是否有一个问题,超越这两个,或我犯了一个错误的地方 下面是一个简单的例子: admin.py:Django 重写ModelAdmin.save_model()和ModelForm.save()时出现问题,django,Django,我希望重写ModelForm的save()函数,以便在用户按下特定的提交按钮时更新模型上的字段。我还想检查一些其他字段并更新它们的值,我已经在ModelAdmin的save_model()函数中完成了这项工作。但是,正在为对象传递save_model()函数。如果我注释掉表单的save()函数,那么save_model()函数将按预期工作 是否有一个问题,超越这两个,或我犯了一个错误的地方 下面是一个简单的例子: admin.py: class TestAdmin(admin.ModelAdmi
class TestAdmin(admin.ModelAdmin):
form = TestForm
def save_model(self, request, obj, form, change):
print 'test'
super(PostAdmin, self).save_model(request, obj, form, change)
admin.site.register(TestModel, TestAdmin)
forms.py:
class TestForm(forms.ModelForm):
class Meta:
model = TestModel
def save(self, force_insert=False, force_update=False, commit=True):
print 'test'
super(TestForm, self).save(commit=True)
如果您正在重写
ModelAdmin.save\u model
,而没有调用super().save\u model
(在您的示例中,我可以看到),则应该显式调用表单.save()
如果您以某种方式调用
ModelForm.save
,通过超级或显式调用,我不明白为什么它不起作用;但是我可以告诉您,如果我要覆盖save\u模型
,我的首选是将自己限制为覆盖模型。save()
您的模型表单
需要返回实例
就我所记得的,就在save\u model
之前,管理员执行save(commit=False)
并将未保存的实例传递给save\u model
。如果不返回任何内容,save()==None
return super(CategoryForm, self).save(commit=True)
最后一行应该读TestForm而不是CategoryForm吗?好的,我已经编辑了这个问题