Python 查询Django模型两级向下外键关系
我正在使用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
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")