我们有以下型号:
class House(models.Model):
pass
class Room(models.Model):
house = models.ForeignKey(house)
size = models.IntegerField()
我们使用Django Rest Framework序列化房屋及其房间。问题是我们要按大小过滤房间。我们有一个视图集,用于定义查询集:
def get_queryset():
return House.objects.filter(...)
我们尝试过的事情:
House.objects.filter(room_set__size__gte=10)
-但这使房屋的房间大于10,但实际上并没有过滤出房间House.objects.filter().annotate(big_rooms=FilteredRelation('room', condition=Q(room_set__size__gte=10)))
似乎最相关,但没有任何效果:(我也考虑过使用.extra()
,但是似乎不推荐使用它,所以它不是一个很好的解决方案...我知道我可以使用自定义sql,但是,我们使用Django rest框架过滤器,因此会非常复杂。
答案 0 :(得分:0)
class House(models.Model):
address = models.TextField(verbose_name='Addr', max_length=255)
def __str__(self):
return self.address
class Room(models.Model):
house = models.ForeignKey(House, on_delete=models.CASCADE, related_name='room')
size = models.IntegerField(verbose_name="size meters x2")
现在是否要选择所有房间面积大于或等于10的房屋
您可以使用
House.objects.filter(room__size__gte=10).distinct()