在已过滤的查询集

时间:2018-04-04 20:57:53

标签: django django-queryset django-select-related

我有一个查询集。然后,根据我的软件中是否存在某些事情,我会进一步过滤查询集。

venuelist = Venue.objects.filter(approved=True, online=True) # intial queryset

然后,如果事情是真的,我会进一步过滤。

venuelist = venuelist.filter(venuetype__in=venuetypepklist)

根据我的理解__inOR运算符而不是AND

我有一种情况,如果某些事情是真的,我需要进一步过滤,但我需要过滤相关的场地对象集。

我知道我们可以用set相关来做到这一点。但我检查的东西在实际的场地对象中也可能是真的。

例子。我的场地表中有一个完整的容量选项。

我也在场地的每个房间都有容量选项。

我的过滤器应在哪里工作场地没有被过滤掉,如果任一fullbuyout容量值场地是大于或等于该用户输入容量或与场地房间容量中的一个比inputed用户等于或大于值。

我正在使用Q对象并选择查询,但似乎我做得不对,或者真的不知道我在做什么。

以上是我目前为上述过滤器所做的事情

seatedcapacity = self.request.query_params.get('seatedcapacity',None)
        if seatedcapacity is not None:
           venuelist.filter(Q(select_related('Room").seatedcapacity__gte=seatedcapacity) | Q(fullbuyoutseatedcapacity__gte=seatedcapacity))

但它不起作用。我假设因为语法相关的问题。所以我的问题是正确的语法是什么?

1 个答案:

答案 0 :(得分:0)

yourRegEx = re.compile(r'^th\w*') # ^ for beginning of string 仅确保相关模型也从数据库加载,您不能使用它们来过滤您的查询。您想使用select_relatedSubquery:这是documentation

假设您在ExistsForeignKey之间存在Venue关系,即每个Room都有Room的外键:

Venue