在James Bennett的文章"So you want a dynamic form"(2008年11月9日)中,他写道,要创建一个动态表单,您可以执行以下操作:
def make_contact_form(user):
fields = { 'name': forms.CharField(max_length=50),
'email': forms.EmailField(),
'message': forms.CharField(widget=forms.Textarea) }
if not user.is_authenticated():
fields['captcha'] = CaptchaField()
return type('ContactForm', (forms.BaseForm,), { 'base_fields': fields })
但是对于forms.ModelForm
,你会怎么做呢?在
到目前为止,我只是在做这样的事情(我不知道如何将type
与内部类“Meta”一起使用)
其中include_fields
是我要显示的字段元组。在
然而,即使我写了一个正确的make_order_edit_form
,我如何在views.py
中使用它?具体来说,我如何将POST请求和order实例都传递给它?通常我会做一些
order = Order.objects.get(pk=pk)
order_form = OrderEditForm(data=request.POST, instance=order)
额外问题:
为什么贝内特用forms.BaseForm
而不是forms.Form
创建{
make_order_edit_form
返回一个ModelForm
类,因此您可以对于附加问题,请检查
^{pr2}$Form
代码:Form
有一个自定义的元类DeclarativeFieldsMetaclass
,它自动收集用声明性语法编写的表单字段,如果在type()
中使用Form
,它看起来像(以Bennett为例)更新
使用
type
来构建ModelForm
,没有什么不同相关问题 更多 >
编程相关推荐