Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 调整django通用编辑视图生成的表单_Python_Django_Forms_Django Models - Fatal编程技术网

Python 调整django通用编辑视图生成的表单

Python 调整django通用编辑视图生成的表单,python,django,forms,django-models,Python,Django,Forms,Django Models,我试图理解在django中生成通用表单视图的过程。我有一个只有 class BookUpdate(UpdateView): model = Book fields = [ 'name', 'pages', 'categorys' ] 它会根据我的模型数据自动生成一个工作html表单。但是现在,我想修改为类别显示的字段,是否有任何方法可以做到这一点,或者我必须创建一个完整的工作图书表

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

class BookUpdate(UpdateView):
    model = Book
    fields = [  'name',
                'pages',
                'categorys'
                ]
它会根据我的模型数据自动生成一个工作html表单。但是现在,我想修改为
类别显示的字段,是否有任何方法可以做到这一点,或者我必须创建一个完整的工作
图书表单
类和自定义
图书更新
类?这里只有3个字段,但在我的实际案例中,可能有15个字段需要我自己编码,这只是因为
类别
字段中有一个微小的变化


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

您可以在基于类的通用视图中指定
字段
表单类
。对于
字段
,Django将使用modelform_工厂生成表单。那你就没有什么可以定制的了

您应该创建一个
BookForm
类,以便自定义字段。在
BookUpdate
视图中,只需删除
字段
并添加
form\u class=BookForm
。这里,我正在为
类别
定制小部件,并覆盖
页面
的表单字段:

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

def BookForm(ModelForm):
    pages = MyCustomPagesField()

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

请注意,您不必指定所有字段,您可以使用
“\uuuu all\uuuu”
来指定所有字段,也可以设置
exclude=[]
来仅排除一对字段

您不必自己编写字段代码。但是有一小部分工作要做,因为没有一个方法可以覆盖

您需要做的是定义一个自定义表单。因为这将是一个模型表单,所以它将使用相同的逻辑根据模型自动创建其字段。然后可以覆盖其中一个的定义

class BookForm(forms.ModelForm): 
     categorys = forms.ModelMultipleChoiceField(custom_attributes_here...)

    class Meta:
        model = Book
        fields = ["name", "pages", "categorys"]
现在告诉您的视图使用该表单:

class BookUpdate(UpdateView):
    form_class = BookForm