2012-09-28 3 views
1

모델 유효성 검사기에 대해 CompareDates라는 유효성 검사 클래스를 사용하는 모델이 있고 유효성 검사기에 두 개의 필드 값을 전달하려고합니다. 그러나 나는 유효성 검사기에서 여러 필드 값을 사용하는 방법을 잘 모르겠습니다.여러 값을 장고 모델 유효성 검사기에서 사용할 수 있습니까?

전체적으로 모델의 유효성을 검사하기 위해 날짜를 비교할 수 있기를 원하지만 유효성 검사기에 전달 된 값을 키워드로 사용할 수 없거나 뭔가 누락 된 것 같지 않습니까?

from django.db import models 
from myapp.models.validators.validatedates import CompareDates 

class GetDates(models.Model): 
    """ 
    Model stores two dates 
    """ 
    date1 = models.DateField(
      validators = [CompareDates().validate]) 
    date2 = models.DateField(
      validators = [CompareDates().validate]) 

답변

4

"일반"유효성 검사기는 현재 필드 값만 가져옵니다. 그래서 당신이하려는 일을하지 않을 것입니다. 그러나 다음과 같이 save 메소드를 덮어 쓸 수도 있습니다.

class GetDates(models.Model): 
    date1 = models.DateField(validators = [CompareDates().validate]) 
    date2 = models.DateField(validators = [CompareDates().validate]) 
    def clean(self,*args,**kwargs): 
     CompareDates().validate(self.date1,self.date2) 
    def save(self,*args,**kwargs): 
     # If you are working with modelforms, full_clean (and from there clean) will be called automatically. If you are not doing so and want to ensure validation before saving, uncomment the next line. 
     #self.full_clean() 
     super(GetDates,self).save(*args,**kwargs) 
+1

docs에 이어 clean이 자동으로 호출되지는 않지만 수동으로 어딘가에서 호출해야합니다. save 메소드. 그게 500 오류를 돕는 것은 아닙니다. 하지만 코드를 수정했습니다. – schacki

+0

큰 고마워요 :) –

+0

이것이 가치있는 것은 Django Rest Framework에서 작동하지 않을 것입니다 (저는 틀린 것으로 입증되기를 바랍니다). 모델의 clean() 내에서 django.core.exceptions.ValidationError를 발생 시키면 500 내부 서버 오류가 발생합니다. 가장 좋은 해결 방법은 장고 ValidationError를 rest_framework ValidationError로 바꾸고 그것을 다시 던지는 것입니다. 자세한 정보 : https://github.com/encode/django-rest-framework/issues/2145 – Bosco

관련 문제