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
- Template tag - list punctuation for a list of items by shapiromatron 11 months, 2 weeks ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 11 months, 3 weeks ago
- Serializer factory with Django Rest Framework by julio 1 year, 6 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 7 months ago
- Help text hyperlinks by sa2812 1 year, 7 months ago
Comments
Please login first before commenting.