Hoy, vamos a ver como crear asociaciones en las bases de datos con la ayuda de Django, como crear el formulario para rellenar dicha asociación, como definir el url que nos va ayudar a crear las asociaciones y finalmente como crear la vista la cual va a procesar la información que guardemos en dicho formulario.
La próxima semana veremos como crear el template o la plantilla necesaria para crear el comentario, agregaremos un botón el cual nos va a permitir desde el artículo agregar los comentarios y por último, veremos como desplegar todos los comentarios disponible dentro de un artículo.
¡Alerta!
Todos los ejemplos usados en el tutorial de son una continuación de los ejemplos del capitulo anterior.
¿Como crear una asociación o relación de base de datos en Django?
Lo primero que tenemos que hacer para definir una relación de base de datos en Django es crear dos modelos que puedan ser asociados uno con el otro, en nuestro caso ya poseemos uno, el modelo articulo, solo nos faltaría el segundo. Veamos como crearlo:
Agreguemos al archivo models.py
que se encuentra en la app blog
el siguiente código:
12345 classComentario(modelsModel): nombre=modelsCharField(max_length=200) cuerpo=modelsTextField() fecha_pub=modelsDateTimeField('fecha publicacion') articulo=modelsForeignKey(Articulo)
Observemos lo siguiente:
- Creamos un modelo llamado Comentario, el cual va a guardar todos los comentarios realizados a un artículo.
- Con
nombre = models.CharField(max_length = 200)
guardamos el nombre de la persona que realizo el comentario.- Con
cuerpo = models.TextField()
guardamos el cuerpo del comentario.- Con
fecha_pub = models.DateTimeField('fecha publicacion')
guardamos la fecha en que es publicado dicho comentario- Con
articulo = models.ForeignKey(Articulo)
guardamos la relación que existe entre el articulo y el **comentario
Si no sabes como crear un modelo en Django te recomiendo que le eches un ojo a Modelos en Django.
Cabe resaltar que existen diferentes maneras de crear relaciones de bases de datos dentro del framework de Django, veamos las más importantes:
- Muchos a uno: Para definir este tipo de relación usamos
ForeignKey()
. Sirve para asociar un modelo a muchos modelos diferentes (1:n). Ejemplo: una marca de carros posee varios carros. - Muchos a muchos: Para definir este tipo de relación usamos
ManyToManyField()
. Sirve para asociar varios modelos a muchos modelos diferentes (n:n). Ejemplo: diferentes pizzas poseen diferentes toppings.
En el ejemplo de los comentarios estamos usando la asociación (1:n).
Si quieres saber mas acerca de los tipos de asociaciones que puedes realizar en Django te recomiendo que visites Relaciones de modelos en Django.
Una vez que realicemos la asociación debemos permitir la manera que el usuario pueda hacer uso de dicha asociación. Veamos como:
Lo primero que tenemos que hacer es crear un form para dicho modelo, para realizar esto vamos a agregar el siguiente código al archivo forms.py
dentro de nuestra app:
12345 classComentarioForm(formsModelForm): classMeta: model=Comentario fields=('nombre',‘cuerpo')
Observemos que creamos un form para el modelo Comentario con la ayuda de Django. Con
model = Comentario
asignamos el modelo correspondiente al form que queremos desplegar y confields = ( ‘nombre’, ‘cuerpo’ )
le indicamos a Django que solo puede mostrar estos campos en vez de todos los que restan en el modelo.
Si no sabes como crear un form o formularios en Django te recomiendo que le eches un ojo a Formularios en Django.
Ahora lo que tenemos que hacer es agregar un url para que podamos acceder a la vista de crear los comentarios. Para esto necesitamos agregar lo siguiente al archivo urls.py
dentro de la app blog
:
1 url(r'^agregar_comentario/(?P<articulo_id>\d+)/$','blog.views.agregar_comentario'),
Si no sabes como crear urls en Django te recomiendo que le eches un ojo a Urls en Django.
Seguido a esto debemos crear la vista a la cual va a acceder el la url que creamos anteriormente para eso agregamos el siguiente código al archivo views.py
en la app blog
:
123456789101112131415161718192021222324 def agregar_comentario(request,articulo_id): articulo=Articuloobjectsget(id=articulo_id) ifrequestPOST: form=ComentarioForm(requestPOST) ifformis_valid(): comentario=formsave(commit=False) comentariofecha_pub=timezonenow() comentarioarticulo=articulo comentariosave() returnHttpResponseRedirect('/articulos/obtener/%s'%articulo_id) else: form=ComentarioForm() args={} argsupdate(csrf(request)) args['articulo']=articulo args['form']=form returnrender_to_response('agregar_comentario.html',args)
Observemos lo siguiente:
- Con
articulo = Articulo.objects.get(id=articulo_id)
estamos obteniendo el articulo con el id que provee la url, es decir, el artículo al cual debemos agregar el comentario.- Con
comentario = form.save(commit=False)
guardamos la instancia del comentario una vez que sea valida pero no le hacemos commit, es decir, no la guardamos en la base de datos.- Con
comentario.fecha_pub = timezone.now()
asignamos la hora cuando creamos el comentario.- Con
comentario.articulo = articulo
asignamos el articulo al comentario.- Con
comentario.save()
guardamos todo en la base de datos.- Y finalmente redirigimos a obtener el artículo al cual le agregamos el comentario.
Si no sabes como crear una vista en Django te recomiendo que le eches un ojo a Vistas en Django.
Hasta acá vamos a llegar con el tutorial de hoy, en el próximo capitulo terminaremos de ver como crear el template o la plantilla necesaria para crear el comentario, agregaremos un botón el cual nos va a permitir desde el artículo agregar los comentarios y por ultimo, veremos como desplegar todos los comentarios disponible dentro de un artículo.
Conclusión
En esta lección, aprendimos como crear asociaciones en las bases de datos con la ayuda de Django, como crear el formulario para rellenar dicha asociación, como definir el url que nos va ayudar a crear las asociaciones y finalmente como crear la vista la cual va a procesar la información que guardemos en dicho formulario. Si tienes alguna pregunta, yo estaré feliz de responderte en los comentarios, además espero que te unas y le eches un vistazo a todo el resto de este curso.
¡Te espero la próxima semana con la Parte II!