dad*_*yad 5 python django django-models django-forms django-admin
我想在管理员验证之前填充一个字段.
models.py
class Ad(models.Model):
.....
manual_code = models.BooleanField("Manual Code", default=False)
code = models.TextField("Code")
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
最终我想生成整个"代码"字段,但我仍然在管理员中得到错误,该字段为空虽然我可以在shell中看到它的值("dadad").
我也试过了
def clean_code(self):
Run Code Online (Sandbox Code Playgroud)
它根本没有调用那个功能.
而且我也试过了
def save_model(request,....):
Run Code Online (Sandbox Code Playgroud)
在AdAdmin类中,但它也没有调用它.
所以我该怎么做?
除了调用您的自定义clean方法之外,Django 还会单独验证每个表单字段。这是导致所需字段错误的单独字段检查。有关完整详细信息,请参阅有关表单和字段验证的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
Run Code Online (Sandbox Code Playgroud)
一旦不需要该字段,表单将在验证期间调用该clean_code方法,因此您可以在那里设置值。
| 归档时间: |
|
| 查看次数: |
2730 次 |
| 最近记录: |