如何在Django管理员中使用不同的窗体小部件?

时间:2011-06-15 14:12:29

标签: django forms widget

我尝试了类似的东西:

class PedidoForm(forms.ModelForm):
    class Meta:
        model = Pedido
        widgets = {
            'nota': forms.Textarea(attrs={'cols': 80, 'rows': 20}),
        }

但它在列表视图和单个对象视图中都发生了变化。我想仅为单个对象视图更改int。我可以这样做吗?

我想要这个:

enter image description here

但不是这样:

enter image description here

1 个答案:

答案 0 :(得分:1)

不要覆盖Meta类中的窗口小部件,只需将窗口小部件设置为覆盖__init__,并在管理类中指定窗体。您指定的表单将仅用于添加/更改视图。例如:

#forms.py
from django import forms
class PedidoAdminForm(forms.ModelForm):
    class Meta:
        model = Pedido

    def __init__(self, *args, **kwargs):
        super(PedidoAdminForm, self).__init__(*args, **kwargs)
        self.fields['nota'].widget = forms.Textarea()

#admin.py
from django.contrib import admin
from your_app.forms import PedidoAdminForm
from your_app.models import Pedido

class PedidoAdmin(admin.ModelAdmin):
    form = PedidoAdminForm
    list_editable = ['nota']

这在Django 1.3中对我有用。希望能帮到你。