首页 > 解决方案 > 调整由 django 通用编辑视图生成的表单

问题描述

我试图了解在 django 中生成通用表单视图的过程。我有一个通用视图类,只有

class BookUpdate(UpdateView):
    model = Book
    fields = [  'name',
                'pages',
                'categorys'
                ]

它会从我的模型数据中自动生成一个工作的 html 表单。但是现在,我想修改为 显示的字段,categorys有什么办法可以做到这一点,还是我必须创建一个完整的工作BookForm类和自定义BookUpdate类?这里只有 3 个字段,但在我的真实案例中,我可能需要自己编写 15 个字段,因为该category字段的微小变化。

我不能使用任何类方法覆盖单个字段吗?

标签: pythondjangoformsdjango-models

解决方案


您可以指定fieldsform_class在基于类的通用视图中指定。使用fields,Django 将使用 modelform_factory 来生成表单。那时您可以自定义的东西不多。

您应该创建一个BookForm类,以便您可以自定义字段。在您BookUpdate看来,您只需要删除fields和添加form_class = BookForm. 在这里,我正在为以下内容自定义小部件categorys并覆盖表单字段pages

def BookUpdate(UpdateView):
    model = Book
    form_class = BookForm

def BookForm(ModelForm):
    pages = MyCustomPagesField()

    class Meta:
        model = Book
        fields = '__all__'
        widgets = {'categorys': MyCustomWidget()}

请注意,您不必指定所有字段,您可以使用"__all__"所有字段,也可以设置exclude = [<list fields to exclude>]为仅排除几个字段。


推荐阅读