【发布时间】:2024-01-07 15:10:01
【问题描述】:
在管理站点中,我有一个自定义表单。但是,我想重写 save 方法,这样如果输入了某个关键字,我就不会将其保存到数据库中。这可能吗?
class MyCustomForm (forms.ModelForm):
def save(self, commit=True):
input_name = self.cleaned_data.get('input_name', None)
if input_name == "MyKeyword":
//Do not save
else:
return super(MyCustomForm, self).save(commit=commit)
但这会返回错误:
AttributeError 'NoneType' object has no attribute 'save'
编辑 在此之后:Overriding the save method in Django ModelForm
我试过了:
def save(self, force_insert=False, force_update=False, commit=True):
m = super(MyCustomCategoryForm, self).save(commit=False)
input_name = self.cleaned_data.get('input_name', None)
if input_name != "MyKeyword":
m.save()
return m
但如果 input_name 为“MyKeyword”,管理站点仍会创建一个新条目
【问题讨论】:
-
那段代码有什么问题?您可以将其简化为将条件更改为
if input_name != "MyKeyword": super(MyCustomForm, self).save(commit=commit),但除此之外它应该像您编写的那样工作。 -
我试过了,但错误是:AttributeError 'NoneType' object has no attribute 'save'
-
那么您的 ModelForm 可能没有返回正在保存的对象:它返回“无”。阅读此答案*.com/a/817364/1688590。
标签: python django model django-admin overriding