Login

Custom admin widgets by field type

Author:
dgouldin
Posted:
March 10, 2009
Language:
Python
Version:
1.0
Score:
0 (after 0 ratings)

There are probably ways to improve the implementation, but this was something I came up with when I wanted to change the default size of all of my CharField admin fields. Now all I have to do in my ModelAdmin class is:

form = get_admin_form(model)

or subclass BaseAdminForm if I need extra validation or more widget customization for an individual admin form.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from django import forms
from django.forms import fields, widgets

class BaseAdminTextInputWidget(widgets.TextInput):
    def __init__(self, *args, **kwargs):
        super(BaseAdminTextInputWidget, self).__init__(*args, **kwargs)
        self.attrs.update({
            'size': '75',
        })

WIDGET_OVERRIDES = [
    (fields.CharField, BaseAdminTextInputWidget),
]

def override_widget(fields, field_type, widget):
    for name,field in fields.items():
        if isinstance(field, field_type):
            field.widget = widget()

class BaseAdminForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(BaseAdminForm, self).__init__(*args, **kwargs)
        for field_type, widget in WIDGET_OVERRIDES:
            override_widget(self.fields, field_type, widget)

def get_admin_form(form_model):
    class ModelAdminForm(BaseAdminForm):
        class Meta:
            model = form_model
    return ModelAdminForm

More like this

  1. Template tag - list punctuation for a list of items by shapiromatron 2 months, 2 weeks ago
  2. JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 2 months, 3 weeks ago
  3. Serializer factory with Django Rest Framework by julio 9 months, 2 weeks ago
  4. Image compression before saving the new model / work with JPG, PNG by Schleidens 10 months, 1 week ago
  5. Help text hyperlinks by sa2812 11 months ago

Comments

Please login first before commenting.