post thumbnail

Django desde Cero: Relaciones o Asociaciones en Base de Datos (Parte I)

Publicado Por: Carlos Picca, El 31/10/2013


Detalles del Curso:

Dificultad: Aprendiz

Duración: 30 min


Más artículos en Django desde Cero

Este es el artículo Relaciones o Asociaciones en Base de Datos (Parte I) de la serie Django desde Cero - Mostrar todos

  1. Instalación y herramientas
  2. Modelos y Base de Datos
  3. Vistas Dinámicas
  4. Sitio de Administración
  5. Formularios (Forms)
  6. Urls Avanzadas
  7. Validaciones de formulario
  8. Relaciones o Asociaciones en Base de Datos (Parte I)
  9. Relaciones o Asociaciones en Base de Datos (Parte II)

Bienvenidos una vez más a Django desde Cero, curso en el cual aprendemos a programar sin conocimiento alguno. En el capítulo anterior, te enseñe como crear validadores de formularios. Los validadores nos ayudan a prevenir información errónea en nuestra app. Si eres nuevo en este curso, te recomiendo que le eches un vistazo al capítulo anterior para que te pongas en contexto (Capítulo 7 - Validaciones de formulario )

Este tutorial es muy largo para darlo en un solo capitulo es por eso que lo voy a dividir en dos partes.

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:

class Comentario(models.Model):
   nombre = models.CharField(max_length = 200)
   cuerpo = models.TextField()
   fecha_pub = models.DateTimeField('fecha publicacion')
   articulo = models.ForeignKey(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:

class ComentarioForm(forms.ModelForm):

   class Meta:
      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 con fields = ( ‘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:

    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:

def agregar_comentario(request, articulo_id):
    articulo = Articulo.objects.get(id=articulo_id)

    if request.POST:
      form = ComentarioForm(request.POST)
      if form.is_valid():
        comentario = form.save(commit=False)

        comentario.fecha_pub = timezone.now()
        comentario.articulo = articulo

        comentario.save()

        return HttpResponseRedirect('/articulos/obtener/%s' % articulo_id)
    else:
        form = ComentarioForm()

    args = {}
    args.update(csrf(request))

    args['articulo'] = articulo
    args['form'] = form

    return render_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!


¿Te ha gustado esta publicación?

Compártela:

Por Carlos Picca

Conoce más sobre este autor aquí


comments powered by Disqus