2011-12-16 77 views
0

作爲一個Django新手打勾,我有一個問題要問,這應該是很簡單的,但我就是想不通:驗證models.CharField如果models.BooleanField在Django管理

我有創建類似下面的模型:

from django.db import models 
from django.core.exceptions import ValidationError 

def validate_case_id(value): 
    if value != "testing": 
     raise ValidationError("type testing") 

class case_form3_tb(models.Model): 
    case_id = models.CharField(max_length=20, blank=True, null=True, verbose_name="Case ID", validators=[validate_case_id]) 
    wound_others = models.BooleanField(verbose_name="Others") 
    wound_others_desc = models.CharField(max_length=200, blank=True, null=True, verbose_name="Others (Description)")  

我想驗證它的方式,如果wound_others打勾,然後wound_others_desc不能爲空。

我只是學習如何驗證一個單一的文本字段,但如果文本字段是基於其他字段驗證呢?

謝謝。

+0

大多數情況下,對於CharField,您不需要`null = True`。如果你有`blank = True`,Django管理員將會保存空字符串。 – Alasdair 2011-12-16 10:41:37

回答

3

你應該validate at the model level,即寫clean()方法對模型:

def clean(self): 
    from django.core.exceptions import ValidationError 
    if self.wound_others and not self.wound_others_desc: 
     raise ValidationError('Description must not be blank.') 

作爲一個側面說明,您選擇的型號名稱是重防Python的。您應該始終遵循CapWords約定的Python類名稱。

+2

這是正確的方法,但Django管理員將爲空的CharField保存````而不是`None`。該檢查應該是`如果self.wound_others而不是self.wound_others_desc`。 – Alasdair 2011-12-16 10:43:14