如何为管理站点创建自定义清理方法?

时间:2012-05-17 07:37:00

标签: 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")

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类中

,但它也没有调用它。

那我该怎么办?

1 个答案:

答案 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方法,因此您可以在那里设置值。