[Fixed]-List_editable and widgets

21👍

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.

👤DS.

9👍

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(
                attrs={
                    '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.

👤lechup

Leave a comment