2016-11-11 302 views
1

我嘗試設置ChoiceField長在我的Django的形式,我用下面的:django admin,設置選擇字段的長度?

from django.forms import TextInput, Textarea, ChoiceField 

class SiteAdmin(admin.ModelAdmin): 
    formfield_overrides = { 
     models.CharField: {'widget': TextInput(attrs={'size':'25'})}, 
     models.ChoiceField: {'widget': TextInput(attrs={'size':'25'})}, 
     models.GenericIPAddressField: {'widget': TextInput(attrs={'size':'25'})}, 
    } 
    ... 

,然後得到了錯誤:

File "/var/www/infternal/sites/admin.py", line 18, in SiteAdmin 
    models.ChoiceField: {'widget': TextInput(attrs={'size':'25'})}, 
AttributeError: 'module' object has no attribute 'ChoiceField' 

有誰知道我需要改變,以改變選擇/下拉長度?

謝謝

回答

0

因爲您正在以錯誤的方式定義您的表單集。 ChoiceField是Django表單的屬性,而不是Django模型。

您的代碼應該是這樣的:

SOME_CHOICES = (
    ('1', 'Choice1'), 
    ('2', 'Choice2'), 
) 
class SiteAdmin(admin.ModelAdmin): 
    formfield_overrides = { 
     models.TextField: {'widget': TextInput(attrs={'size':'25'})}, 
     models.CharField: {'widget': ChoiceField(choices=SOME_CHOICES,max_length=25})}, 
     models.GenericIPAddressField: {'widget': TextInput(attrs={'size':'25'})}, 
    } 
+0

我的選擇來自外鍵,我會在這種情況下做什麼? – AlexW

+0

@AlexW你目前的問題是這個錯誤「AttributeError:'模塊'對象沒有屬性'ChoiceField'」這將通過我的答案來解決。如果您需要詢問另一個查詢,請將其作爲一個不同的問題 –

+0

@AlexW,如果您的選擇來自外鍵,請在此計算並在「選擇= SOME_CHOICES」中將它們替換爲SOME_CHOICES。 –

0

您可以覆蓋formfield_for_foreignkeyformfield_for_choicefield分別改變爲外鍵或選擇字段的字段。例如:

def formfield_for_choice_field(self, db_field, request, **kwargs): 
    field = super(MyModelAdmin, self).formfield_for_choice_field(db_field, request, **kwargs) 
    field.widget.attrs['size'] = '25' 
    return field