При использовании list_editable в ModelAdmin
существует ли способ изменить виджет, используемый для редактируемых полей? Я не могу найти ничего в документации. Похоже, это было бы то, что вы могли бы настроить.
List_editable и виджеты
Ответ 1
Переопределить метод get_changelist_form
вашего класса ModelAdmin
, например:
def get_changelist_form(self, request, **kwargs):
kwargs.setdefault('form', MyAdminForm)
return super(MyModelAdmin, self).get_changelist_form(request, **kwargs)
И отдельно определите модифицированный MyAdminForm
:
class MyAdminForm(forms.ModelForm):
class Meta:
model = MyModel
my_field = forms.DateField(widget=widgets.AdminDateWidget())
Это просто пример, который сделает my_field
представленным виджетами только для даты (без времени). Это выглядит намного лучше в представлении списка.
Ответ 2
Если вы хотите изменить только виджет (проверено на django 1.5
) (вам не нужно указывать ect.) использовать этот синтаксис:
from django import forms
class OfferForm(forms.ModelForm):
class Meta:
model = Offer
widgets = {
'description' : forms.Textarea(
attrs={
'cols': '20',
}
)
}
Где widgets
dict - это dict, ключи которого являются именами полей и значений, представляют виджеты, которые вы хотите переопределить.
В качестве документации указано для django 1.5+, это также возможно:
class OfferAdmin(admin.ModelAdmin):
def get_changelist_form(self, request, **kwargs):
return OfferForm
Без каких-либо super()
и kwargs
жонглирования.