Django QuerySet与过滤相关的对象

时间:2014-10-10 08:07:19

标签: django django-queryset

class Quarter(models.Model):
    ...


class House(models.Model):
    quarter = models.ForeignKey(Quarter, related_name='houses')


class FloorRange(models.Model):
    house = models.ForeignKey(House, related_name='floor_ranges')
    is_commercial = models.BooleanField(default=False)

帮助我找到获取houses Quarterhouses个对象的最佳方式,其中floor_ranges有一个或多个is_commercial=True {{1}}

1 个答案:

答案 0 :(得分:0)

首先获得与四分之一相关的所有房屋。

houses = House.objects.filter(quarter=quarter)

然后将结果过滤到至少有一个楼层范围is_commercial=True的人。为此,请使用相关名称floor_ranges和双下划线__来跨越关系。

houses = houses.filter(floor_ranges__is_commercial=True)

最后,使用distinct()来防止多个楼层范围为is_commercial=True的房屋出现重复结果。

houses = houses.distinct()