Resize fields in Django Admin Resize fields in Django Admin django django

Resize fields in Django Admin


You should use ModelAdmin.formfield_overrides.

It is quite easy - in admin.py, define:

from django.forms import TextInput, Textareafrom django.db import modelsclass YourModelAdmin(admin.ModelAdmin):    formfield_overrides = {        models.CharField: {'widget': TextInput(attrs={'size':'20'})},        models.TextField: {'widget': Textarea(attrs={'rows':4, 'cols':40})},    }admin.site.register(YourModel, YourModelAdmin)


You can set arbitrary HTML attributes on a widget using its "attrs" property.

You can do this in the Django admin using formfield_for_dbfield:

class MyModelAdmin(admin.ModelAdmin):  def formfield_for_dbfield(self, db_field, **kwargs):    field = super(ContentAdmin, self).formfield_for_dbfield(db_field, **kwargs)    if db_field.name == 'somefield':      field.widget.attrs['class'] = 'someclass ' + field.widget.attrs.get('class', '')    return field

or with a custom Widget subclass and the formfield_overrides dictionary:

class DifferentlySizedTextarea(forms.Textarea):  def __init__(self, *args, **kwargs):    attrs = kwargs.setdefault('attrs', {})    attrs.setdefault('cols', 80)    attrs.setdefault('rows', 5)    super(DifferentlySizedTextarea, self).__init__(*args, **kwargs)class MyModelAdmin(admin.ModelAdmin):  formfield_overrides = { models.TextField: {'widget': DifferentlySizedTextarea}}


To change the width for a specific field.

Made via ModelAdmin.get_form:

class YourModelAdmin(admin.ModelAdmin):    def get_form(self, request, obj=None, **kwargs):        form = super(YourModelAdmin, self).get_form(request, obj, **kwargs)        form.base_fields['myfield'].widget.attrs['style'] = 'width: 45em;'        return form