简体   繁体   中英

django admin, set choice field length?

im trying to set the ChoiceField length in my django form, I used the below:

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'})},
    }
    ...

and then got the error:

  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'

Does anyone know what i need to alter to change the select/dropdown length?

Thanks

Because you are defining your form set in the wrong way. ChoiceField is an attribute of Django forms, not Django models.

Your code should be like this :

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'})},
    }

You could override formfield_for_foreignkey or formfield_for_choicefield to alter the field for foreign keys or choice fields respectively. For example:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM