python - 调整由 django 通用编辑视图生成的表单
问题描述
我试图了解在 django 中生成通用表单视图的过程。我有一个通用视图类,只有
class BookUpdate(UpdateView):
model = Book
fields = [ 'name',
'pages',
'categorys'
]
它会从我的模型数据中自动生成一个工作的 html 表单。但是现在,我想修改为 显示的字段,categorys
有什么办法可以做到这一点,还是我必须创建一个完整的工作BookForm
类和自定义BookUpdate
类?这里只有 3 个字段,但在我的真实案例中,我可能需要自己编写 15 个字段,因为该category
字段的微小变化。
我不能使用任何类方法覆盖单个字段吗?
解决方案
您可以指定fields
或form_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>]
为仅排除几个字段。
推荐阅读
- flutter - Dart - 相当于 Dart 的 C# Stream/MemoryStream 和 stream.WriteByte(..)
- php - Python:print json.dumps 在独立调用时不返回任何内容
- linux - 从 Linux 内核模块禁用输入设备
- virtual-machine - QEMU 虚拟机:在 Windows 10(主机)和 Solaris 2.7(来宾)之间创建共享文件夹
- javascript - 如何使用 javascript 对 for 循环 jinja 模板字段执行计算
- sql-server - Localdb 不保存更改
- css - 如何使用具有透明背景的图像?
- python - ModuleNotFoundError:在 vscode 中没有使用 venv 的模块名为“请求”
- python - 如何根据关键字将python字典解包到变量
- php - 在php中将索引数组转换为二维数组的最佳方法