从 Django 中基于类的通用视图自定义表单变量的首选方法是啥?
Posted
技术标签:
【中文标题】从 Django 中基于类的通用视图自定义表单变量的首选方法是啥?【英文标题】:What is the perferred way to customize the form variable from a class-based Generic View in Django?从 Django 中基于类的通用视图自定义表单变量的首选方法是什么? 【发布时间】:2012-04-11 18:49:22 【问题描述】:我目前正在使用CreateView
类Order
。
urls.py
的一部分看起来像这样
url(
r'^orders/create/$',
CreateView.as_view(
model = Order,
template_name = 'doors/orders/create.html'
),
name = 'orders_create'
),
如果我只是在oors/orders/create.html
中执行 form
,那么它将显示在models.py
中声明的所有字段。
自定义每个字段的外观并控制它们是否可见(某些字段是可选的)的最佳方法是什么?
【问题讨论】:
【参考方案1】:要回答关于模型的哪些字段应在表单中可用的部分问题,您可以使用ModelForm
创建一个自定义表单。 fields
和 exclude
选项定义了表单中可用的字段:
https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#using-a-subset-of-fields-on-the-form
然后,您可以通过添加 form_class
来告诉 CreateView
使用您的自定义表单:
url(
r'^orders/create/$',
CreateView.as_view(
model = Order,
template_name = 'doors/orders/create.html',
form_class = OrderCreateForm,
),
name = 'orders_create'
),
关于问题的第二部分(如何设置表单及其字段的样式),您可以使用 form.as_p
、 form.as_table
或组合一个完全自定义的模板:
https://docs.djangoproject.com/en/dev/topics/forms/#displaying-a-form-using-a-template
【讨论】:
所以我想在models.py
内创建OrderCreateForm
?
最好将您的自定义表单放在一个名为 forms.py
的模块中(与您的 models.py
处于同一级别。
我正在阅读您链接的文档和their full example put all the form classes right next to the model classes。那么文档给出了一个不好的例子?
嗯,好问题。也许我会在 Django Mailinglist 上问它。大多数时候,我坚持以下约定:streamhacker.com/2011/01/03/django-application-conventions以上是关于从 Django 中基于类的通用视图自定义表单变量的首选方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 Django 中当前基于类的通用视图模型向模板加载器添加路径
基于 Django 类的视图:发布表单数据返回 302 Found 状态码
从 Django 中基于类的通用视图将 request.user 对象发送到 ModelForm