2014-02-06 3 views
0

에 따라 코드가 장고 1.5까지 유효에서 위치 인수에 질식 : 1.6에서forms.CharField 장고 1.6

from django import forms 
f = forms.CharField('f') 

이후이 무효가되어, 다음과 같은 메시지가 결과 :

File "lib/python2.7/site-packages/django/forms/fields.py", line 202, in __init__ 
    self.validators.append(validators.MaxLengthValidator(int(max_length))) 
ValueError: invalid literal for int() with base 10: 'f' 

장고 문서에서는 v1.2로 되돌아가는 위치 인수에 대해 설명하지 않습니다.

sender = forms.EmailField('sender', label=_(u'Sender')) 

첫 번째 위치에있는 문자 인수의 기능은 무엇입니까 : 나는 (또한 인터넷에서 많은 예에서 발견된다)와 같은 구조를 가지고 코드를 업그레이드해야? 그것은 초기 값일까요?

답변

1

모든 필드 유형이 다릅니다. CharField (CharField을 상속하므로 EmailField)의 경우 첫 번째 매개 변수는 max_length입니다.

Django 1.5 이전에 유효했던 이유를 알 수 없습니다. 1.5 이전의 코드를 살펴보면 잘못된 것입니다.

아마도 모델 필드를 생각하고 계십니까? 모델 필드의 경우 대부분의 경우 첫 번째 매개 변수는 verbose_name이며,이 경우 f = models.CharField('f')이 적합합니다.

+0

동작을 보여주기 위해 사용한 코드는 모델 필드가 아닌 양식 필드를 테스트하고 있음을 명확히해야합니다. max_length는 kwarg이므로 위치가 없습니다. fileds의 __init__에는 이것이 없습니다. djagno 1.5와 1.6의 차이점은 CharField의 __init__에서 1-6까지는 MaxLengthValidator를 int (max_length)로 호출한다는 것입니다. 1.6 이전 그것은 max_length를 그대로 취했습니다. – rhoerbe

+0

네 말이 맞다. 그것은 kwarg이지만 위치도있다. 'CharField'에 대한 __init__1 메쏘드를 보라 : def __init __ (self, max_length = None, min_length = None, * args, ** kwargs) :'다음과 같이하면 :'forms.CharField ('f')' f '에서'max_length'까지입니다. – jproffitt

+0

1.6 이전에는 그대로 max_length를 전달했습니다. 그러나 그것은 여전히 ​​분명히 문자열을 전달하는 데 의미가 있습니다. 이전에는 실패하지 않았지만 여전히 "정확하지"않았습니다. – jproffitt