[Fixed]-List_editable and widgets


Override get_changelist_form method of your ModelAdmin class, like so:

def get_changelist_form(self, request, **kwargs):
  kwargs.setdefault('form', MyAdminForm)
  return super(MyModelAdmin, self).get_changelist_form(request, **kwargs)

And separately define the modified MyAdminForm:

class MyAdminForm(forms.ModelForm):
  class Meta:
     model = MyModel
  my_field = forms.DateField(widget=widgets.AdminDateWidget())

This is just an example which will make my_field represented by a widget for only the date (without time). That looks much better in the list view.



If you want to change widget only (tested on django 1.5) you won’t need to set labels ect. just use this syntax:

from django import forms

class OfferForm(forms.ModelForm):
    class Meta:
        model = Offer
        widgets = {
            'description' : forms.Textarea(
                    'cols': '20',

Where widgets dict is dict whose keys are names of fields and values represents widgets you want to override.

As documentation states for django 1.5+ its also possible to just:

class OfferAdmin(admin.ModelAdmin):
    def get_changelist_form(self, request, **kwargs):
        return OfferForm

Without any super() and kwargs juggling.


Leave a comment