[pyar] Django: Relacion basada en multiples campos

Luis Masuelli luismasuelli en hotmail.com
Mie Ene 7 19:50:46 ART 2015


El tema es que los campos de FK en Django solo bancan un campo, y no multiples. Entonces no vas a tener un handler que sea un atributo solo; no de forma nativa. IMHO es una limitación del concepto de los ORM como tal, más que un problema de Django (es decir: con SQLAlchemy y con Hibernate no veo que puedas solucionarlo - aunq tal vez me equivoque xq no uso SQLAlchemy hace un año e hibernate hace casi 2).
Normalmente un esquema en ORM, que proviene de una base de datos (o en el caso de Django suele generar dicha base de datos), hace que cada atributo se genere contra un único campo (así, los FKs se generan contra un único campo en la BD). Pero esto no siempre es así: el caso del GenericForeignKey te genera un solo atributo en el objeto, pero para establecer la referencia usa DOS campos (dichos campos TAMBIEN deben declararse dentro del modelo). En este sentido, el GenericForeignKey es lo que realmente se usa al momento de acceder a los datos PERO:
En la base de datos subyacente, no existe ningun campo creado por este atributo GenericForeignKey.Se requiere que en el modelo declares OTROS DOS CAMPOS a partir de los cuales el GenericForeignKey debe valerse para acceder a los datos.Se requiere que cuando filtres e insertes, uses los campos subyacentes y NUNCA el campo que declaraste como GFK porque dicho campo no existe en la bd por propia forma.
En este sentido, podrías basarte en dicha idea para hacer tu Manager personalizado (GenericForeignKey se basa en otros dos campos, y no genera ninguno por cuenta propia; vos deberias declarar esos dos campos T2 y T3 como venis haciendo, y crearte un manager personalizado para que, atraves de esos 2 campos, puedas acceder a los objetos en la otra tabla como estás acostumbrado: con un solo atributo).
Así como tal es medio como brujería, pero es una de las limitaciones de diseño que tienen los ORM.
Date: Wed, 7 Jan 2015 17:00:40 -0300
From: nicolas.rebagliati en aenima-x.com.ar
To: pyar en python.org.ar
Subject: Re: [pyar] Django: Relacion basada en multiples campos

Perdon se me mando el mail antes de terminar.class A():    T2 = IntegerField    T3= IntegerField    Nombre = CharField
class B():    T2 = IntegerField    T3= IntegerField
la idea seria tener la relación de la Clase B con la clase A para poder obtener el Nombre. Pero como puedo generar esto?Tendria que implementarlo en un Custom Manager?
Para colmo la situación es peor ya que las tablas están particiondas por fecha, por lo cual los nombres son dinámicos según lo que se busca.Pero eso ya lo tengo solucionado


2015-01-07 16:55 GMT-03:00 Nicolas Rebagliati <nicolas.rebagliati en aenima-x.com.ar>:
Estoy teniendo un problema con una app que tiene que usar una BD que ya existe.Estoy modelandola, pero tengo el problema que 2 modelos estan relacionados mediante una composición de llaves.Seria algo asi
class A():    T2 = IntegerField  2 = IntegerField




_______________________________________________
pyar mailing list pyar en python.org.ar
http://listas.python.org.ar/listinfo/pyar

PyAr - Python Argentina - Sitio web: http://www.python.org.ar/

La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de Argentina - http://www.usla.org.ar 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20150108/b7aa3587/attachment.html>


More information about the pyar mailing list