2014-02-06 52 views
0

以下代碼是有效的,直到Django的1.5:forms.CharField上位置參數扼流圈從在Django 1.6

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

從1.6起這是無效的並且在下面的消息的結果:

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' 

Django的文檔不會解釋返回到v1.2的位置參數。我需要升級具有同樣的結構(這也是在很多例子中發現在互聯網上)代碼:

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

什麼是處於第一位置的文字參數的功能?它可能是初始值嗎?

回答

1

每種字段類型都不同。對於CharField(還有EmailField,因爲它繼承自CharField),第一個參數是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從int(max_length)調用MaxLengthValidator。 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

相關問題