2014-01-16 6 views
0

방법 MinLengthValidator이 장고에 정의되어 변경 MinLengthValidator 오류 메시지 :장고 : 여기

password_min_length_validator = MinLengthValidator(8) 
password_min_length_validator.message = ungettext_lazy(
    'Ensure password has at least %(limit_value)d character (it has %(show_value)d).', 
    'Ensure password has at least %(limit_value)d characters (it has %(show_value)d).', 
    'limit_value') 

그러나 나는이 오류가 무엇입니까 :

class MinLengthValidator(BaseValidator): 
    compare = lambda self, a, b: a < b 
    clean = lambda self, x: len(x) 
    message = ungettext_lazy(
     'Ensure this value has at least %(limit_value)d character (it has %(show_value)d).', 
     'Ensure this value has at least %(limit_value)d characters (it has %(show_value)d).', 
     'limit_value') 
    code = 'min_length' 

내가 이렇게 내 코드에서 오류 메시지가 변경 시도 :

ugettext() takes exactly 1 argument (3 given) 

나는 django.core.validators와 같은 방식으로 작업을 수행하고 있습니다.

+0

전체 스택 트레이스를 제공하십시오. – Serafeim

답변

0

이전 버전의 장고를 사용하고있는 것처럼 보입니다. 따라서 현재 구현이 아닌 장고 버전의 MinLengthValidator에 코드를 적용해야합니다. Django 1.6에서 ungettext_lazy 메서드가 변경 되었기 때문에 오류가 발생했습니다 (티켓 #19160 참조).

예를 들어, 장고 1.5.x 이하에, 당신이 할 것 대신 당신이 검사기를 인스턴스화 한 후 속성 메시지를 설정하는

from django.utils.translation import ugettext_lazy as _ 

class MinLengthValidator(BaseValidator): 
    compare = lambda self, a, b: a < b 
    clean = lambda self, x: len(x) 
    message = _('Ensure this value has at least %(limit_value)d characters (it has %(show_value)d).') 
    code = 'min_length' 

password_min_length_validator = MinLengthValidator(8) 
password_min_length_validator.message = _(
    'Ensure password has at least %(limit_value)d characters (it has %(show_value)d).', 
) 

, 당신이 그것을 서브 클래스 수 :

class MyMinLengthValidator(MinLengthValidator): 
    message = _('Ensure my_field has at least %(limit_value)d characters (it has %(show_value)d).') 

my_min_length_validator = MyMinLengthValidator(8) 

을 다른 방법으로, 양식 필드에 error_messages 옵션을 사용할 수 있습니다.

class MyForm(forms.Form): 
    my_field = forms.CharField(validators=[MinLengthValidator(8)], 
         error_messages={'min_length': _('Ensure my_field has at least %(limit_value)d characters (it has %(show_value)d).') 
})