将参数传递给Django CreateView

rfj*_*001 7 django django-views django-class-based-views

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

我无法弄清楚的是如何做到这一点.我猜在模板中我希望<a href="{% url create_sessions %}?class={{ object.pk }}>Create Session</a>在类的DetailView中有类似的东西,并且在我的urls.py文件中包含该行的url url(r'^create-sessions?class=(\d+)/$', CreateSessionsView.as_view(), name = 'create_sessions'),但我对django很新,并且不完全了解这里的位置参数被发送到我的CBV以及如何使用它.

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

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

如果这是明显不正确的,请告诉我.

谢谢!

Dan*_*man 18

GET参数(后面的那些?)不是URL的一部分,在urls.py中不匹配:你可以从request.GETdict获得.但是将该参数作为URL本身的一部分要好得多,因此它的格式为"/ create-sessions/1 /".

所以urlconf将是:

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

现在链接可以是:

<a href="{% url create_sessions class=object.pk %}">Create Session</a>
Run Code Online (Sandbox Code Playgroud)

现在在form_valid中你可以做到:

event = Event.objects.get(pk=self.kwargs['class'])
Run Code Online (Sandbox Code Playgroud)