Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/06/2013, 18:44
forosanto
 
Fecha de Ingreso: julio-2011
Mensajes: 62
Antigüedad: 13 años, 4 meses
Puntos: 5
Doble relación pero una sola opción

Hola chicos, he venido aprendiendo mucho el tema de DRY en Django, pero aun sigo teniendo varios problemitas, supongamos el siguiente modelo:

Tengo un Blog y un Foro, ambas aplicaciones en teoría debería compartir otra aplicación que se requiere con una relación "ForeignKey".


Código Python:
Ver original
  1. #apps blog
  2. class Blog(models.Model):
  3.     title = models.CharField(max_length=100)
  4.     slug = models.SlugField()
  5.     description = models.TextField()
  6.  
  7. #apps foro
  8. class Foro(models.Model):
  9.     title = models.CharField(max_length=100)
  10.     slug = models.SlugField()
  11.     description = models.TextField()
  12.  
  13. #apps video
  14. from blog.models import Blog
  15. from foro.models import Foro
  16. class Video(models.Model):
  17.     blog = models.ForeingKey(Blog, null=True, blank=True)
  18.     foro = models.ForeingKey(Foro, null=True, blank=True)
  19.     title = models.CharField(max_length=100)
  20.     video_url = models.URLField()
  21.     created_at models.DateTimeField()
  22.     updated_at = models.DateTimeField()

La aplicación blog y foro no comparten los mismos atributos literalmente, de serlo se que podría heredar de otra clase abstract. Bueno básicamente tenemos la aplicación video que ambas aplicaciones harán uso. Que me recomiendan así esta bien o genero un modelo de video por cada aplicación:

Código Python:
Ver original
  1. class VideoAbstract(models.Model):
  2.     title = models.CharField(max_length=100)
  3.     video_url = models.URLField()
  4.     created_at models.DateTimeField()
  5.     updated_at = models.DateTimeField()
  6.  
  7.     class Meta:
  8.         abstract = True
  9.  
  10. class ForoVideo(VideoAbstract):
  11.     foro = models.ForeingKey(Foro)
  12.  
  13. class BlogVideo(VideoAbstract):
  14.     blog = models.ForeingKey(Blog)

Cual de estas opciones es mucho mejor, la idea del ejemplo primero es mantener todos los enlaces de video en una sola tabla y por el tema de DRY.

Gracias y un saludos