Как делать запросы к нескольким моделям в django

Я пытаюсь понять наиболее эффективный способ запроса данных, необходимых из нескольких таблиц в 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")

Как я могу оптимизировать запрос ниже, чтобы получить город, к которому принадлежит этот студент?

student = User.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)

Заранее спасибо.

Вы можете сделать запрос с помощью:

City.objects.get(address__student=mystudent)

В результате будет получен запрос, который выглядит следующим образом:

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
Вернуться на верх