Llego el momento de crear los modelos, pero antes analicemos los datos que necesitamos guardar. Nuestro blog tendrá post, comentarios y tags, los que a su vez se componen de:
- Post: fecha, titulo, contenido y etiquetas.
- Etiqueta: nombre.
- Comentario: autor, fecha, contenido.
Teniendo claro el modelo de la base de datos, es hora de escribir el código necesario para crear las tablas, afortunadamente django nos facilita la tarea. Editamos el archivo models.py ubicado en la carpeta de la aplicación:
- # 1
- from django.db import models
- # 2
- class Tag(models.Model):
- # 3
- tag = models.CharField(max_length=100, unique=True, db_index=True)
- # 4
- def __unicode__(self):
- return self.tag
- Importamos el modulo models.
- Creamos una subclase de models.Model,
- Cada columna de la bd es representada por un atributo, en este caso
tag es de tipo caracter (CharField), existen otros tipos de campo según el valor almacenar. Los argumentos describen las propiedades del campo como la cantidad de caracteres que puede contener (max_length), que no se permiten valores repetidos (unique), ademas de hacer que se indexe (db_index) ya que es comun hacer búsquedas como: buscar todos los post con tag django. el método __unicode__ permite dar un nombre mas significativo a las instancias, este es utilizarlo en el sitio administrativo.
- # post
- class Post(models.Model):
- # la relación many to many entre Post y Tag
- tags = models.ManyToManyField(Tag, blank=True)
- title = models.CharField(max_length=200)
- body = models.TextField()
- # fecha de publicación, se agrega fecha automáticamente
- pub_date = models.DateField(auto_now_add=True)
- def __unicode__(self):
- return self.title
- class Comment(models.Model):
- # Cada comentario pertenece a un post
- post = models.ForeignKey(Post)
- # nombre es opcional (blank) y por defecto es Anonimus (default)
- name = models.CharField(max_length=100, blank=True, default="Anonimus")
- # el cuerpo del comentario
- body = models.TextField(verbose_name="comment")
- # fecha de publicación, se agrega fecha automáticamente
- date = models.DateField(auto_now_add=True)
- def __unicode__(self):
- return "Por " + self.name + " en " + self.post.title
- $ python manage.py syncdb
- $ python manage.py shell
- # importamos los modelos
- from blog.models import Tag, Post
- # aun no hay tags así que creamos una
- django = Tag(tag="django")
- django.save()
- # creamos un post
- new_post = Post(title="mi primer post", body="El primer post que realizo")
- new_post.save()
- # agregamos un tag y volvemos a guardar
- new_post.tags.add(django)
- new_post.save()
- get: retorna un solo registro, lanza una excepción si la consulta retorna cero o mas de un registro.
- filter: retorna un array con los registros que coinciden la consulta o un array vacío.
- exclude: similar a filter pero retorna los registros que no cumplen con la consulta.
Estos métodos se acceden a través del atributo objects que poseen las subclases de models.Model.
- # recuperar todos los post
- Post.objects.filter()
- # recuperar los primeros 10
- Post.objects.filter()[:10]
- # post segun titulo
- Post.objects.filter(title="mi primer post")
- # post con tag django
- Post.objects.filter(tags__tag="django")
- # comentarios de posts con tag django
- Comment.objects.filter(post__tags__tag="django")
Con esto tenemos lista la base de datos, en la próxima parte veremos como crear plantillas para visualizar estos datos.
Muchas gracias por su atención, no olviden dejar sus sugerencias, inquietudes y amenazas en los comentarios, hasta la próxima.
No hay respuestas a “Creando un blog con django - parte 2”
Deja una respuesta