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