2014-10-16 4 views
2

Я пытаюсь внедрить приложение для создания встреч, в котором пользователи могут создавать сеансы, связанные с уже существующими классами. То, что я пытаюсь сделать, это использовать django CreateView для создания сеанса без запроса пользователя связанного класса, а под капотом - присвоение класса сеансу. Я пытаюсь сделать это, передав pk класса в URL-адресе, чтобы я мог искать класс в CreateView и назначать класс сеансу.Передача параметров Django CreateView

Я не могу понять, как именно это сделать. Я предполагаю, что в шаблоне я хочу иметь что-то вроде <a href="{% url create_sessions %}?class={{ object.pk }}>Create Session</a> в DetailView для класса и url в моем файле urls.py, содержащем строку url(r'^create-sessions?class=(\d+)/$', CreateSessionsView.as_view(), name = 'create_sessions'), но я довольно новичок в django и не совсем понять, где этот параметр отправлен на мой CBV и как его использовать.

Моего плана спасения класса сессия является переопределением form_valid в моем ОЦК быть:

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

Если это некорректное, пожалуйста, дайте мне знать, как хорошо.

Спасибо!

ответ

12

Параметры GET (после?) Не являются частью URL-адреса и не совпадают с 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']) 
+0

Ааа так чисто. Спасибо! – rfj001

Смежные вопросы