【问题标题】:Django - CreateView form on existing view and urlDjango - 在现有视图和 url 上创建视图表单
【发布时间】: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 在重定向到模板的/create url 为我创建表单。我的问题是我想去author/idurl 看看那里的表格。看来表单需要一个专门为他准备的 URL。
  • 通用视图使用普通的ModelForm,所以它应该像在显式类中或使用modelform_factoryBooks 模型创建一个一样简单,然后实例化一个空的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


【解决方案1】:

CreateView 使用 ModelForm。如果你也想使用它,你需要自己创建一个 Book 模型表单,如下所示:

从 django.forms 导入 ModelForm 类 BookModelForm(ModelForm): 经过

然后实例化它 form=BookModelForm() 并将其传递给您的 author_view_handler 视图的上下文。

但是我不太确定你为什么要做这样的事情......

更新:要将其传递给您的视图,请使用

从 django.shortcuts 导入渲染 def author_view_handler(请求): 形式 = BookModelForm() 返回渲染(请求,'author_view_handler.html',{“form”:form},

以上只是将表单传递给 author_view_handler 视图,包含任何表单处理代码。

【讨论】:

  • 或者 OP 想将多个 url+view+template 组合在一个模板中,类似于 groups.google.com/forum/#!topic/django-users/uJ_fzpPzUkE
  • 我已经为书籍使用了 ModelForm。我只是不知道如何将它传递给author_view_handler 视图。我想访问author/id 网址并查看那里的表格。如何将它传递给上下文?
猜你喜欢
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
  • 2016-12-27
  • 2016-03-25
  • 2020-05-25
相关资源
最近更新 更多