Python 查询Django模型两级向下外键关系

Python 查询Django模型两级向下外键关系,python,django,django-models,Python,Django,Django Models,我正在使用Django构建一个字典应用程序。 此应用程序中的主要模型有Expressions、Definitions和Citys。 逻辑是每个表达式有一个或多个定义s,每个定义与一个城市关联 这是我的问题:我想从表达式级别查询与表达式关联的所有城市 例如,我想做a_表达式.cities,并获得与a_表达式相关联的所有City 这是我的模型: class City(models.Model): city = models.CharField() class Expression(mode

我正在使用Django构建一个字典应用程序。 此应用程序中的主要模型有
Expression
s、
Definition
s和
City
s。 逻辑是每个
表达式
有一个或多个
定义
s,每个
定义
与一个
城市
关联

这是我的问题:我想从
表达式
级别查询与
表达式
关联的所有
城市

例如,我想做
a_表达式.cities
,并获得与
a_表达式相关联的所有
City

这是我的模型

class City(models.Model):
    city = models.CharField()

class Expression(models.Model):
    expression = models.CharField()
    cities = models.ManyToManyField(City, related_name="expressions")

class Definition(models.Model):
    city = models.ForeignKey(City, related_name="definitions")
    expression = models.ForeignKey(Expression, related_name="definitions")
这段代码现在可以工作了。但是,每次我添加
定义时,我都需要将
城市
添加到
表达式和
定义本身


这是我的问题:是否有办法只将
城市
添加到
定义
,然后以某种方式查询
一个表达式。城市
并获取所有城市(基本上去掉
表达式
模型中的
城市
字段)?

定义
类中,不要对不同外键使用相同的
相关名称

class Definition(models.Model):
    city = models.ForeignKey(City, related_name="definitions_city")
    expression = models.ForeignKey(Expression, related_name="definitions_expression")
您可以像这样获得
Expression
city
列表

an_expression = Expression.objects.first()
an_expression.definitions_expression.values('city__city')

因此,在
表达式中不需要
城市
多个字段

不要对
定义
类中的不同外键使用相同的
相关名称

class Definition(models.Model):
    city = models.ForeignKey(City, related_name="definitions_city")
    expression = models.ForeignKey(Expression, related_name="definitions_expression")
您可以像这样获得
Expression
city
列表

an_expression = Expression.objects.first()
an_expression.definitions_expression.values('city__city')
因此,在
Expression
类中不需要
cities
ManyToManyField

class Definition(models.Model):
    city = models.ForeignKey(City, related_name="definitions_city")
    expression = models.ForeignKey(Expression, related_name="definitions_expression")