我有一个qs
过滤器代码,如下:
qs2 = qs1.filter(ipv4s__ip=ip).prefetch_related(
Prefetch('ipv4s', queryset=IPv4Manage.objects.filter(ip=ip)))
现在,我想在此过滤器中添加一个OR
逻辑过滤器。
如何在此查询过滤器中添加or
条件过滤器?
我的意思是我想添加一个或条件过滤器,如下所示: 它将满足
filter(ipv4s__ip=ip).prefetch_related(
Prefetch('ipv4s', queryset=IPv4Manage.objects.filter(ip=ip)))
条件,否则它将满足ip='1.1.1.1'
。
如何实现?
答案 0 :(得分:2)
使用RecyclerView
查询;您基本上是在IN
上选择的:
WHERE ip IN (<ip>, '1.1.1.1')
我假设您要过滤问题和这里要预取的相关filter(ipv4s__ip__in=(ip, '1.1.1.1')).prefetch_related(
Prefetch('ipv4s', queryset=IPv4Manage.objects.filter(ip__in=(ip, '1.1.1.1'))))
对象,因此IPv4Manage
和ipv4s__ip__in
过滤器在上面的示例中使用。例如,如果您只想过滤预取查询集,请进行相应调整。
ip__in
参数采用标准的queryset
实例,因此您可以使用standard query constructing syntax with Q()
objects来构建更复杂的过滤器。
例如,如果使用QuerySet
过滤器无法轻松满足查询条件,则可以通过结合使用IN (...)
过滤器和OR
二进制文件来在Q()
查询上进行构建或运算符:
|
最后但并非最不重要的一点是,如果要在filter(Q(ipv4s__ip=ip) | Q(ipv4s__ip='1.1.1.1')).prefetch_related(
Prefetch('ipv4s', queryset=IPv4Manage.objects.filter(
Q(ip=ip) | Q(ip='1.1.1.1')
)))
关系的ip
列上过滤问题,则您无需进一步过滤相同内容上的预提取条件!它将已经被限制在同一个过滤器中,因此仅使用它就足够了:
ipv4s
filter(ipv4s__ip__in=(ip, '1.1.1.1')).prefetch_related('ipv4s')
将预取与.prefetch_related('ipv4s')
返回的问题相关的IPv4Manage
对象,因此它们已被限制为相同的filter()
列值。