我正在尝试实现一个约会制作应用程序,用户可以在其中创建与预先存在的类相关联的会话。我想要做的是使用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)
如果这是明显不正确的,请告诉我。
谢谢!
答案 0 :(得分:18)
GET参数(后面的那些?)不是URL的一部分,在urls.py中不匹配:你可以从request.GET
dict获得。但是将该参数作为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'])