5

我想在管理员验证之前填充一个字段。

模型.py

class Ad(models.Model):
    .....
    manual_code  = models.BooleanField("Manual Code", default=False)
    code          = models.TextField("Code")

管理员.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 类中,但它也没有调用它。

所以我该怎么做?

4

1 回答 1

2

除了调用您的自定义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

一旦不需要该字段,表单在验证期间调用该clean_code方法,因此您可以在那里设置值。

于 2012-05-17T10:18:08.997 回答