【发布时间】:2014-12-28 01:55:09
【问题描述】:
我在我的项目 CRUD 中使用 django 通用视图。 CreateView 类使用以下 url 工作:
urls.py
url(r'^create', BookCreate.as_view(model=Books, template_name='Myproj/book_create.html'), name='book_create'),
如果我访问 www.mywebsite.com/create,表单会按照我想要的方式显示。
我的问题是我想将表单合并到另一个页面上,该页面已经有一个 url、一个视图和一个模板。网址如下所示:
urls.py
url(r'^author/(?P<id>[0-9]{1,})/$', author_view_handler, name='author_view'),
我该如何解决这个问题?
【问题讨论】:
-
您对在非通用视图中使用表单的熟悉程度如何?换句话说,您只需要知道如何获取表单类,还是需要知道如何在您的
author_view_handler视图中处理表单? -
我知道如何在非通用视图中处理表单,我的问题从通用视图开始。 CreateView 在重定向到模板的
/createurl 为我创建表单。我的问题是我想去author/idurl 看看那里的表格。看来表单需要一个专门为他准备的 URL。 -
通用视图使用普通的
ModelForm,所以它应该像在显式类中或使用modelform_factory为Books模型创建一个一样简单,然后实例化一个空的author_view_handler。我可能会从表单中省略跟踪作者和书籍之间关系的任何字段,并将其设置在我的视图中。 -
好的,现在我的问题发生了变化。如何在我的
author_view_handler视图中调用 BookCreate(CreateView) 类,知道我必须将模型名称(书籍)传递给它?我只是在 url 中传递模型。我是否将其传递给模板? -
您不调用创建类,而是在
modelform上调用save方法。如果书籍与作者之间存在多对一关系,则可能使用commit=False,因此您可以设置作者字段然后保存模型。见docs.djangoproject.com/en/dev/topics/forms/modelforms/…。至于将其传递给模板,只需将其放在您的上下文中即可。
标签: python django forms url modelform