2011-02-16 2 views
2

models.py장고에서 년 범위 사이의 날짜를 선택하려면 사용자를 제한하는 방법?

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!

먼저 검증 정의 : 양식 필드도

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

그리고 :

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) 

지금 당신은 당신의 모델 필드에서 사용할 수 있습니다

from django import forms 

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

자세한 내용을 위에 링크 된 문서에 있습니다. 의 대답에 대한

+0

감사 오리는 거의 정확한 가지고 있지만 인상 ValidationError이 실행에 올 때 나는 오류가 있어요 : 'ValidationError'글로벌 이름 – anks

+0

@anks을 정의되지 않은 \t, 당신은 import 문을 잊지 않았다을? 또한 Django 1.2 이상을 사용하고 있습니까? – Ori

+0

감사합니다 ......... 효과가 있었어요. – anks

관련 문제