2016-02-03 55 views
1

在我的models.py我有一個字段:Django的clean_fields和必填字段

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

如果您想知道,自從我意識到您指的是['clean_fields'](https://docs.djangoproject.com/en/1.9/ref/models/instances/#django.db)後,我刪除了我的回答.models.Model.clean_fields)在模型上而不是表格清理方法.. – Sayse

+0

你是否在模型中使用了模型?..你如何渲染你的模型? – Sayse

+0

你打算從管理面板中填寫該模型嗎? – SebasSBM

回答

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用於驗證表單域。