Foros del Web » Programando para Internet » Python »

Relación de uno a varios modelos

Estas en el tema de Relación de uno a varios modelos en el foro de Python en Foros del Web. Hola, tengo un modelo que necesito relacionarlo con otro modelo como una relacion uno a uno pero no siempre es con el mismo modelo la ...
  #1 (permalink)  
Antiguo 03/12/2013, 03:13
Avatar de jhg
jhg
 
Fecha de Ingreso: marzo-2012
Mensajes: 96
Antigüedad: 12 años, 7 meses
Puntos: 1
Relación de uno a varios modelos

Hola, tengo un modelo que necesito relacionarlo con otro modelo como una relacion uno a uno pero no siempre es con el mismo modelo la relación. Mirando la documentación de Django ya me imagino qu no es posible una relacion de un modelo a varios sino que tengo que hacer una relación por cada modelo que quiero relacionar con este. Pero pregunto por si acaso se pueda y por ver que forma creeis es la mejor de hacer esto.

Estaba pensando en tener relación uno a uno desde cada uno de los modelos a relacionar hacia este que necesita estar relacionado con varios modelos y en este tener un choice con el que saber con que modelo se esta relacionado en esta ocasión y no se si se puede evitar que de los modelos que tienen un uno a uno contra este que solo uno pueda estarlo a la vez.

Es decir, el modelo URL, por ejemplo, unas veces estara relacionado a el modelo Pagina pero otras veces al modelo Blog, la cuestión es cual es la mejor forma de hacer esto, pensaba un oneToOne desde Pagina y desde Blog a URL y en URL un choise que diga si esta en ese momento activa la relacion con Pagina o con Blog y que si una instancia de Pagina esta relacionada con URL que no pueda una instancia de Blog estar relacionada con la misma URL.

O si se os ocurre otra forma o Django tiene algun soporte para casos asi, etc; se agradece.
__________________
JHG
  #2 (permalink)  
Antiguo 03/12/2013, 05:28
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 3 meses
Puntos: 2114
Respuesta: Relación de uno a varios modelos

Lo que necesitas es un modelo polimórfico. Supongo que en Django, que no lo conozco, tendrá algo para hacerlo, sino una búsqueda en Google tipo django polymorphic model siempre ayuda.
  #3 (permalink)  
Antiguo 03/12/2013, 12:39
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Relación de uno a varios modelos

También puedes usar el usar el ContentType framework.

https://docs.djangoproject.com/en/1..../contenttypes/

Una GenericForeingkey, pero esto apuntaría a cualquier modelo y no a un conjuntos de modelos.
  #4 (permalink)  
Antiguo 10/12/2013, 06:19
Avatar de jhg
jhg
 
Fecha de Ingreso: marzo-2012
Mensajes: 96
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Relación de uno a varios modelos

Una lastima que Django no venga más preparado de serie el ORM para cosas así, y estan interesantes los modelos polimorficos y el ORM, ¿Cual creen es mejor, o más conveniente?

Ahora mismo lo tento con relaciones OneToOne desde cada recurso (pagina, blog, etc) hacia el modelo url, que es como lo hice en un principio, que mirando los diagramas ER es como indica que se hace la transformación de la generalización y especialización, pero me imagino que los modelos polimorficos y content type a bajo nivel haran algo por el estilo.

EDITO:
Al final probando la herencia de modelos con eso me ahorro el usar el oneToOne a mano, y los modelform van mejor, me impide usando modelform tener dos hijos con el mismo padre como los campos del padre deben ser unicos, pero aun así sin usar modelforms puedo tener dos hijos apuntando al mismo padre, ¿Hbaria alguna manera de poder restringir esto?

Estaba pensando en usar un save personalizado, en el padre, pero con la herencia me imagino que podria tener efectos colaterales y salir mal.
__________________
JHG

Última edición por jhg; 10/12/2013 a las 10:38 Razón: Añadir información

Etiquetas: django
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:16.