【发布时间】:2011-10-04 19:01:29
【问题描述】:
与 Django 中有关通用视图的许多文档一样,我找不到明确描述如何将新的基于类的通用视图与 Django 表单一起使用的文档。
它是怎么做的?
【问题讨论】:
标签: django django-forms django-views django-generic-views django-class-based-views
与 Django 中有关通用视图的许多文档一样,我找不到明确描述如何将新的基于类的通用视图与 Django 表单一起使用的文档。
它是怎么做的?
【问题讨论】:
标签: django django-forms django-views django-generic-views django-class-based-views
到目前为止,您尝试了什么?基于类的视图非常新,文档中没有很多示例,所以我认为您需要亲自动手并进行实验!
如果您想更新现有对象,请尝试使用UpdateView。查看它使用的 mixin(例如 ModelFormMixin、SingleObjectMixin、FormMixin),看看您可以/必须重写哪些方法。
祝你好运!
【讨论】:
将模型表单与基于类的视图一起使用的最简单方法是传入模型并在 url 中保留捕获的 slug / pk,在这种情况下,您无需编写任何视图代码。
url(r'^myurl/$', CreateView.as_view(model=mymodel))
#Creates a model form for model mymodel
url(r'^myurl/(?<pk>\w+)/$', UpdateView.as_view(model=mymodel))
#Creates a model form for model mymodel and updates the object having pk as specified in url
url(r'^myurl/(?<slug>\w+)/$', DeleteView.as_view(model=mymodel, slug_field="myfield"))
#Creates a model form for model mymodel and deletes the object denoted by mymodel.objects.get(my_field=slug)
您还可以重写方法以获得更复杂的逻辑。您还可以传递查询集而不是模型对象。
另一种方法是在forms.py中创建一个modelform,然后将form_class传递给url作为
url(r'^myurl/$', CreateView.as_view(form_class=myform))
此方法允许您定义表单功能以及表单的 Meta 属性。
【讨论】: