example - Pasar parámetros a Django CreateView
django generic view create (1)
Estoy tratando de implementar una aplicación para hacer citas en la que los usuarios puedan crear sesiones asociadas a clases preexistentes. Lo que trato de hacer es usar un django CreateView para crear una sesión sin pedirle al usuario una clase asociada, mientras bajo el cofre asignando una clase a la sesión. Estoy tratando de hacer esto pasando el pk de la clase en la url, para poder buscar la clase dentro de CreateView y asignar la clase a la sesión.
Lo que no puedo entender es exactamente cómo hacer esto. Supongo que en la plantilla quiero tener algo como <a href="{% url create_sessions %}?class={{ object.pk }}>Create Session</a>
dentro de un DetailView para la clase, y una url en mi archivo urls.py que contiene la línea url(r''^create-sessions?class=(/d+)/$'', CreateSessionsView.as_view(), name = ''create_sessions'')
, pero soy bastante nuevo en django y no entiendo exactamente dónde se envía este parámetro a mi CBV y cómo hacer uso de él.
Mi plan para guardar la clase en la sesión es anular form_valid
en mi CBV para que sea:
def form_valid(self, form): form.instance.event = event return super(CreateSessionsView, self).form_valid(form)
Si esto es descaradamente incorrecto, hágamelo saber también.
¡Gracias!
Los parámetros GET (¿los que están después?) No son parte de la URL y no se corresponden en urls.py: se obtendría de la request.GET
. request.GET
dict. Pero es mucho mejor hacer que ese parámetro forme parte de la propia URL, por lo que tendría el formato "/ create-sessions / 1 /".
Entonces el urlconf sería:
url(r''^create-sessions/(?P<class>/d+)/$'', CreateSessionsView.as_view(), name=''create_sessions'')
y el enlace ahora puede ser:
<a href="{% url create_sessions class=object.pk %}">Create Session</a>
y ahora en form_valid puedes hacer:
event = Event.objects.get(pk=self.kwargs[''class''])