Django基于类的通用视图和模型表单

7

像Django中的许多通用视图文档一样,我找不到明确描述如何使用Django表单的新基于类的通用视图的文档。

如何实现呢?

2个回答

3

你目前尝试了什么?基于类的视图相当新,并且文档没有很多示例,因此我认为你需要动手实验!

如果你想更新现有对象,请尝试使用UpdateView。查看它使用的混合类(例如ModelFormMixinSingleObjectMixinFormMixin),以查看哪些方法可以/必须重写。

祝你好运!


UpdateView看起来是我需要的。如果我正确理解了你链接的文档,我甚至不需要为我的表单编写单独的子类。我的问题是我对Django还比较新,所以一些实际的工作示例会对我有很大帮助。谢谢你提供的链接。 - user658587

2
使用基于类的视图与模型表单最简单的方法是传入模型并在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)) 

该方法允许您定义表单功能以及表单的元属性。

如何使用通用版本的create将一个“entry”添加到类别“category”中?类别(Category):标题= models.CharField()slug = models.CharField()entry = models.ManyToManyField(Entry) - Bryce
url(r'^myurl/$', CreateView.as_view(model=Category, template_name="template.html")) - acid_crucifix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接