Django clean_fields和必填字段

时间:2016-02-03 07:40:36

标签: python django django-models

在我的models.py中,我有一个字段:

content_type = models.CharField(u"Content type", max_length=20)

您可以看到它是强制性的。但是我想自动为它赋值,所以我做了:

def clean_fields(self, *args, **kwargs):
    print(kwargs)
    self.content_type = "Whatever"

但是在Django的管理员中,我收到验证错误,告诉我该字段是必需的。但是当我看到kwargs的内容时,我得到了:

{'exclude': ['id', 'created_on', 'modified_on', 'content_type', 'content_ptr']}

所以我的问题是: 1)为什么此字段出现在'排除'清单? 2)为什么Django会引发此验证错误?

1 个答案:

答案 0 :(得分:1)

您可以像这样自动为模型分配值。

class ModelName(models.Model)    
    content_type = models.CharField(u"Content type", max_length=20)

    def save(self, *args, **kwargs):
        if not self.pk:
            self.set_content_type()
        super(ModelName, self).save(*args, **kwargs)

    def set_content_type(self):
         self.content_type = 'Whatever'
         self.save()

这样,无论何时创建该模型的实例,该字段都将自动获得值。 clean_field用于验证表单字段。