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