2011-02-23 7 views
1

이 모델은 내 Models.py 파일에 있습니다. "start_date"와 "end_date"를 비교하여 start_date 값이 end_date 또는 vice-versa보다 커지지 않도록하고 싶습니다. 어떻게 유효성을 검사합니까?어떻게 장고에서 두 모델 필드를 서로 비교합니까?

class Completion(models.Model): 

    start_date = models.DateField() 
    end_date = models.DateField() 
    batch = models.ForeignKey(Batch) 
    topic = models.ForeignKey(Topic) 

답변

6

나는 모델 검증 프레임 워크를 시작하려고합니다. http://docs.djangoproject.com/en/dev/ref/models/instances/#django.db.models.Model.clean

이 파일은 ModelForms에 의해 사용되고 있으며, 사용하기에 충분합니다.

기본적으로 모델에서 clean() 메서드를 정의하고 유효성 검사 논리를 넣은 다음 실패한 경우 ValidationError을 발생시킵니다.

class MyModel(models.Model): 
    def clean(self): 
     from django.core.exceptions import ValidationError 
     if self.start_data > self.end_date: 
      raise ValidationError('Start date cannot precede end date') 


    def save(self, *args, **kwargs): 
     # you can have regular model instance saves use this as well 
     super(MyModel, self).save(*args, **kwargs) 

여기 장점은 관리자 사이트를 의미있는 ModelForm가 (너무 차례로 추가 작업없이 모델 clean()를 호출 full_clean()를 호출 것이다.

필요 없음을 save_model을 무시, 당신입니다 관리자 양식 상단에 일반적인 확인 오류가 표시됩니다. description

마지막으로 매우 편리하므로 어디서나 사용할 수 있습니다.

try: 
    my_model.full_clean() 
except ValidationError, e: 
    # Do something based on the errors contained in e.message_dict. 
    # Display them to a user, or handle them programatically. 
+0

문제 없습니다. 추천. 내가 그걸 열정적으로 볼 수 있니? : D –

+0

당신은 환상적입니다;) – anshul

관련 문제