在我的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会引发此验证错误?
答案 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用于验证表单字段。