将参数传递给 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的主要内容,如果未能解决你的问题,请参考以下文章