找出queryset的关系

时间:2014-08-12 18:58:35

标签: django django-models django-queryset

我目前有一些模型可以与用户直接相关,也可以不与用户直接相关。 User RegionLocation

User通过ForeignKey Locationmanager相关,Region通过ForeignKey Locationregion相关。

我的问题是,如果我要返回属于某个用户的所有区域,那么显示UserRegion之间关系的正确查询集是什么。

class Region(models.Model):
    name = models.CharField(max_length=255)
    ...

class Location(models.Model):
    region = models.ForeignKey(Region, blank=True, null=True)
    manager = models.ForeignKey(User, blank=True, null=True)
    ...

如果我能提供帮助,我想尽量避免在UserRegion之间建立直接关系。

1 个答案:

答案 0 :(得分:4)

假设user变量是User个实例,

你可以这样查找:

 regions = Region.objects.filter(location__user=user) 

基本上,对于查询集中的反向外键关系,在这种情况下,您可以使用小写的modelname进行字段查找 - location

如果此类关系不存在,regions.count()将为0

此功能的文档为here

实现这一目标的另一种方法是,

regions = user.location_set.values('region') #or values_list - or however you want this