【问题标题】:Django Class-Based Generic Views and ModelForms基于 Django 类的通用视图和 ModelForms
【发布时间】:2011-10-04 19:01:29
【问题描述】:

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

它是怎么做的?

【问题讨论】:

    标签: django django-forms django-views django-generic-views django-class-based-views


    【解决方案1】:

    到目前为止,您尝试了什么?基于类的视图非常新,文档中没有很多示例,所以我认为您需要亲自动手并进行实验!

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

    祝你好运!

    【讨论】:

    • UpdateView 看起来是我需要的。如果我理解您正确链接点的文档,我什至不需要为我的表单编写单独的子类。我的问题是我对 Django 还很陌生,所以一些实际的工作示例对我很有帮助。谢谢你的链接。
    【解决方案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)) 
    

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

    【讨论】:

    • 如何使用通用版本的 create 将“条目”添加到类“类别”? class Category(models.Model): title = models.CharField) slug = models.CharField() entry = models.ManyToManyField(Entry)
    • url(r'^myurl/$', CreateView.as_view(model=Category, template_name="template.html"))
    猜你喜欢
    • 2012-02-21
    • 2012-10-27
    • 2013-05-01
    • 2016-08-06
    • 2011-10-01
    • 1970-01-01
    • 2013-12-13
    • 2022-01-07
    • 2012-12-28
    相关资源
    最近更新 更多