我有一个查询集。然后,根据我的软件中是否存在某些事情,我会进一步过滤查询集。
venuelist = Venue.objects.filter(approved=True, online=True) # intial queryset
然后,如果事情是真的,我会进一步过滤。
venuelist = venuelist.filter(venuetype__in=venuetypepklist)
根据我的理解__in
是OR
运算符而不是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))
但它不起作用。我假设因为语法相关的问题。所以我的问题是正确的语法是什么?
答案 0 :(得分:0)
yourRegEx = re.compile(r'^th\w*') # ^ for beginning of string
仅确保相关模型也从数据库加载,您不能使用它们来过滤您的查询。您想使用select_related
或Subquery
:这是documentation。
假设您在Exists
和ForeignKey
之间存在Venue
关系,即每个Room
都有Room
的外键:
Venue