2011-02-16 54 views
2

models.py如何限制用戶在django中選擇年份範圍內的日期?

class Completion(models.Model): 
    start_date = models.DateField() 
    end_date = models.DateField() 
    batch = models.ForeignKey(Batch) 
    topic = models.ForeignKey(Topic) 

在上面的代碼中DateField()產生在管理網站的日期選擇控件,您可以選擇合適的日期或在文本框中手工輸入。這些問題是:

  1. 如何限制用戶選擇的是根據2000年年即將2100

  2. 一個日期,當用戶手動類型在文本框中輸入一個日期,它接受任何日期格式爲yy-mm-dd。我需要驗證,因此不應輸入不存在的日期。

回答

8

結賬validators

首先,定義您的驗證:

from django.core.exceptions import ValidationError 

def validate_current_century(value): 
    if value < 2000 or value > 2100: 
     raise ValidationError(u'%s is not a valid year!' % value) 

現在你可以用它在你的模型字段:

class Completion(models.Model): 
    start_date = models.DateField(validators=[validate_current_century]) 
    end_date = models.DateField(validators=[validate_current_century]) 

而且還表單域:

from django import forms 

class MyForm(forms.Form): 
    current_century_field = forms.DateField(validators=[validate_current_century]) 

更多細節在文檔中,鏈接到上面。

+0

感謝大利的answer.I得到它幾乎是正確的,但在提高ValidationError來執行我得到了一個錯誤:\t 全局名稱「ValidationError」沒有定義 – anks 2011-02-16 08:12:45

相關問題