Solicitud de unión en Django entre tres tablas y mostrar todos los atributos.
Tengo tres modelos
class A(models.Model):
campo1 = models.IntegerField()
class B(models.Model):
id_a = models.ForeignKey(A,on_delete=models.CASCADE)
campo1 = models.IntegerField()
campo2 = models.IntegerField()
class C(models.Model):
id_a = models.ForeignKey(A,on_delete=models.CASCADE)
campo1 = models.IntegerField()
campo2 = models.IntegerField()
Quiero escribir una consulta que se vea así: SELECT * FROM B,C,A WHERE B.id_a=C.id_a WHERE A.id_a=2
y mostrar todos los atributos de las dos tablas. Aquí está lo que intenté hacer:
a_id_att = 1
data = B.objects.filter(id_a=C.objects.filter(id_a=a_id_att)[0])
No funciona. ¿Cómo escribir el “join” y hacer que se muestren todos los atributos de las tablas?
davy.ai
Para unir los tres modelos A, B y C, y mostrar todos sus atributos, puedes utilizar la API de consultas de Django y la función select_related(). Aquí tienes un ejemplo de código que puede lograr esto:
En este código, primero usamos select_related() para recuperar los campos relacionados de A y C para cada objeto B. Luego filtramos basándonos en la id de A que queremos utilizar (a_id_att) y también nos aseguramos de que cada objeto B tenga un objeto C correspondiente (utilizando el filtro __isnull=False). Finalmente, podemos recorrer los datos e imprimir todos los atributos de los tres modelos según lo deseado.