generic example createview create django django-views django-class-based-views

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