将参数传递给Django CreateView

时间:2014-10-16 15:11:26

标签: django django-views django-class-based-views

我正在尝试实现一个约会制作应用程序,用户可以在其中创建与预先存在的类相关联的会话。我想要做的是使用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 个答案:

答案 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'])