我想在管理员验证之前填充一个字段。
models.py
class Ad(models.Model):
.....
manual_code = models.BooleanField("Manual Code", default=False)
code = models.TextField("Code")
admin.py
class MyAdAdminForm(forms.ModelForm):
class Meta:
model = Ad
def clean(self):
cleaned_data = self.cleaned_data
cleaned_data['code'] = "dadad"
print cleaned_data
return cleaned_data
class AdAdmin(admin.ModelAdmin):
form = MyAdAdminForm
admin.site.register(Ad, AdAdmin)
最终我想生成整个“代码”字段,但我仍然在管理员中得到错误,该字段为空虽然我可以在shell中看到它的值(“dadad”)。
我也试过
def clean_code(self):
并且根本没有调用该功能。
我也试过
def save_model(request,....):
在AdAdmin类中,但它也没有调用它。
那我该怎么办?
答案 0 :(得分:2)
除了调用自定义clean
方法之外,Django还会单独验证每个表单字段。这是导致所需字段错误的单个字段检查。有关完整详细信息,请参阅Form and field validation上的Django文档。
如果您在代码字段中不需要用户输入,则可以覆盖表单的__init__
方法,并设置required=False
。
class MyAdAdminForm(forms.ModelForm):
class Meta:
model = Ad
def __init__(self, *args, **kwargs):
super(MyAdAdminForm, self).__init__(*args, **kwargs)
self.fields['code'].required = False
一旦不需要该字段,表单将在验证期间调用clean_code
方法,因此您可以在那里设置值。