将参数传递给 Django CreateView

Posted

技术标签:

【中文标题】将参数传递给 Django CreateView【英文标题】:Passing Parameters to Django CreateView 【发布时间】:2014-12-12 00:35:09 【问题描述】:

我正在尝试实现一个约会应用程序,用户可以在其中创建与预先存在的课程相关联的会话。我想要做的是使用 django CreateView 创建会话而不询问用户关联的类,同时在后台为会话分配一个类。我试图通过在 url 中传入类的 pk 来做到这一点,这样我就可以在 CreateView 中查找类并将类分配给会话。

我不知道究竟是如何做到这一点的。我猜想在模板中我想在类的 DetailView 中有类似 <a href="% url create_sessions %?class= object.pk >Create Session</a> 的东西,并且在我的 urls.py 文件中包含一个包含该行的 url url(r'^create-sessions?class=(\d+)/$', CreateSessionsView.as_view(), name = 'create_sessions'),但我对 django 还是很陌生,并不完全了解此参数发送到我的 CBV 的位置以及如何使用它。

我将课程保存到会话的计划是通过将我的 CBV 中的 form_valid 覆盖为:

def form_valid(self, form): form.instance.event = event return super(CreateSessionsView, self).form_valid(form)

如果这明显不正确,也请告诉我。

谢谢!

【问题讨论】:

【参考方案1】:

GET 参数(那些在 ? 之后的参数)不是 URL 的一部分,并且在 urls.py 中不匹配:您可以从 request.GET 字典中获取。但最好将该参数作为 URL 本身的一部分,因此它的格式为“/create-sessions/1/”。

所以 urlconf 将是:

url(r'^create-sessions/(?P<class>\d+)/$', CreateSessionsView.as_view(), name='create_sessions')

链接现在可以是:

<a href="% url create_sessions class=object.pk %">Create Session</a>

现在你可以在 form_valid 中做:

event = Event.objects.get(pk=self.kwargs['class'])

【讨论】:

啊,好干净。谢谢! 如何将渲染数据中的上下文传递给 createview ,在 SO 中有一个关于相同的问题:***.com/questions/56325133/…

以上是关于将参数传递给 Django CreateView的主要内容,如果未能解决你的问题,请参考以下文章

将参数传递给 django 表单

如何使用 HTMX 和 Django 将参数传递给视图?

django 将参数传递给模板标签中的函数

是否可以将查询参数传递给 Django % url % 模板标签?

将参数传递给 Django 中的 ListView

Django:将参数传递给父模板