【问题标题】:Django QuerySet with filtered related objects带有过滤的相关对象的 Django QuerySet
【发布时间】:2014-10-10 08:07:18
【问题描述】:
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)

帮我找到获得housesQuarter 对象的最佳方法,其中houses 有一个或多个floor_rangesis_commercial=True

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    首先获取与季度相关的所有房屋。

    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()
    

    【讨论】:

    • 谢谢你,我认为用一行更好:House.objects.filter(quarter=quarter, floor_ranges__is_commercial=False).distinct()
    • 当然,我把它分成多行以便于解释。
    猜你喜欢
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2019-02-14
    相关资源
    最近更新 更多