2012-08-26 55 views
10

我在我的模型中使用了django DateField。沒有自定義表單的Django模型字段驗證

class CalWeek(models.Model): 
    start_monday = models.DateField(verbose_name="Start monday") 

我有一個自定義的驗證方法是特定於我modelField:我想確認,它實際上是一個星期一。我目前沒有理由在管理員中使用自定義的ModelForm - Django生成的一個很好。創建一個自定義的窗體類,所以我可以利用糖,django表單類提供似乎很多工作只是爲了添加一些字段驗證。我意識到我可以override the model's clean method並在那裏提出ValidationError。然而,這並不理想:這些錯誤被認爲是非現場錯誤,最終導致頁面頂部,而不是旁邊的有問題的用戶輸入 - 這不是理想的用戶體驗。

是否有一種簡單的方法來驗證特定的模型字段,並讓您的錯誤消息顯示在管理員的字段旁邊,而無需使用自定義窗體類?

回答

14

你可以看看Django驗證器。

https://docs.djangoproject.com/en/dev/ref/validators/

你會把驗證前級,然後設置在該領域的驗證。

def validate_monday(date): 
    if date.weekday() != 0: 
     raise ValidationError("Please select a Monday.") 

class CalWeek(models.Model): 
    start_date = models.DateField(validators=[validate_monday]) 
+0

不錯!我不知道我是如何忽略這一點的。 –

+0

酷!以前沒有用過,但是這很乾淨。發佈乾淨的驗證器! –