Estoy tratando de entender la forma más eficiente de consultar los datos necesarios de varias tablas en Django .
class City(): name = models.CharlField() class Address(): line1 = models.CharlField() ... city_id = models.ForeignKey(City, ... related_name="city_address") class Student() name = models.CharlField() gender = models.CharlField() # a student can only have one address address_id = models.OneToOneField(Address, ... related_name="address_student")¿Cómo puedo optimizar la consulta a continuación para obtener la ciudad a la que pertenece este estudiante?
student = Student.objects.filter(name="John").first() # assuming its a unique name address_id = student.address_id address = Address.objects.filter(id=address).first() city_id = address.city_id City.objects.get(id=city_id)Puedes consultar con:
City.objects.get( address__student= mystudent )Esto producirá una consulta que se parece a:
SELECT city.* FROM city INNER JOIN address ON address.city_id_id = city.id INNER JOIN student ON student.address_id_id = address.id WHERE student.id = id_of_the_student