list_editable和小部件

时间:2011-08-15 14:16:58

标签: django django-admin

ModelAdmin中使用list_editable时,有没有办法更改用于可编辑字段的窗口小部件?我在文档中找不到任何内容。这似乎是你可以自定义的东西。

2 个答案:

答案 0 :(得分:18)

覆盖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。在列表视图中看起来要好得多。

答案 1 :(得分:7)

如果您只想更改小部件(在django 1.5上测试)(您不需要设置标签等),请使用以下语法:

from django import forms

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

其中widgets dict是dict,其键是字段名称,值表示要覆盖的小部件。

正如documentation所述,对于django 1.5+而言,它也可能只是:

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

没有任何super()kwargs杂耍。