如何从django中的多个模型中查询
How to query from multiple models in 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 = 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)
您可以查询:
City.objects.get(<strong>address__student=<em>mystudent</em></strong>)
这将生成如下所示的查询:
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 = <em>id_of_the_student</em>
我正在尝试了解从 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 = 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)
您可以查询:
City.objects.get(<strong>address__student=<em>mystudent</em></strong>)
这将生成如下所示的查询:
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 = <em>id_of_the_student</em>