【发布时间】:2015-08-03 05:25:34
【问题描述】:
假设我有以下模型:
class Revision:
content = models.TextField()
article = models.ForeignKey('Article', null=True)
class Article:
title = models.CharField(max_length=64)
revision = models.OneToOneField('Revision', null=True)
我想要为一篇文章创建和编辑页面。我为两者创建了ModelForms。我已经开始编写CreateView 和UpdateView,但不确定如何在每个视图中包含这两个表单(然后将其传递给模板并呈现为<form>)。
我发现大多数结果的目标是创建两个单独的 HTML <form>s 和单独的提交按钮,在一个视图中动态选择不同的表单,或者创建一个带有字段集的表单数组。相反,我希望在一个<form> 中显示两个ModelForm,以便在我设计的示例中(是的,标题应该在修订版中,但不是)我可以同时更改标题和内容一次。
据我所知,我需要以某种方式手动将这两个表单添加到上下文数据中,然后当用户提交时,绑定每个表单(通过将 POST 参数传递给构造函数)并检查它们的有效性。我可以从头开始摸索,但想知道首选方式,也许是现有的基于通用类的视图。哪些方法最好重载以注入所需的功能?通用视图不应该用于这么复杂的事情(尽管对我来说似乎很简单)?
假设我再介绍第三种模型:
class Page:
slug = models.CharField(max_length=64)
article = models.OneToOneField('Article', null=True)
现在我想要创建和编辑Page 的新视图。继承 Article 的视图,我想添加一个表单来允许修改 slug。我提出这个是因为我想要一个解决上面Article 视图的解决方案,它足够强大,可以在不重复代码的情况下处理聚合。我想这种情况很常见,我希望有一个我错过的简单解决方案。
【问题讨论】:
标签: django django-forms django-views django-class-based-views