When using list_editable in ModelAdmin, is there any way to change the widget used for the editable fields? I can't find anything in the documentation. Seems like this would be something you'd be able to customize.
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(
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With