Login

Custom admin widgets by field type

Author:
dgouldin
Posted:
March 10, 2009
Language:
Python
Version:
1.0
Tags:
newforms admin widget customize
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. Custom Widget Types for HTML5 Form Fields by leveillej 5 years ago
  2. Autocomplete TextInput Widget w/ Static Data (jQuery UI) by JoeLinux 2 years, 2 months ago
  3. Hidden Date Display Widget for Admin by andrew.schoen 5 years, 10 months ago
  4. Django using admin horizontal filter in forms by crodjer 3 years, 11 months ago
  5. Currency DB Field by Rupe 6 years ago

Comments

Please login first before commenting.