Python 如何在此预回迁相关查询筛选器中添加`或`条件筛选器?

Python 如何在此预回迁相关查询筛选器中添加`或`条件筛选器?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个qs过滤代码,如下所示: qs2 = qs1.filter(ipv4s__ip=ip).prefetch_related( Prefetch('ipv4s', queryset=IPv4Manage.objects.filter(ip=ip))) 现在我想在这个过滤器中添加一个或逻辑过滤器 如何在此查询筛选器中添加或条件筛选器 我的意思是我想添加一个条件过滤器,如下所示: 它将满足这一需求 filter(ipv4s__ip=ip).prefetch_relate

我有一个
qs
过滤代码,如下所示:

qs2 = qs1.filter(ipv4s__ip=ip).prefetch_related(
            Prefetch('ipv4s', queryset=IPv4Manage.objects.filter(ip=ip)))
现在我想在这个过滤器中添加一个
逻辑过滤器

如何在此查询筛选器中添加
条件筛选器

我的意思是我想添加一个条件过滤器,如下所示: 它将满足这一需求

filter(ipv4s__ip=ip).prefetch_related(
            Prefetch('ipv4s', queryset=IPv4Manage.objects.filter(ip=ip)))
否则它将满足
ip='1.1.1.1'


如何实现这一点?

查询中使用
;您基本上是在
中选择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\uuu ip\uu in
ip\uu in
过滤器。如果您只想过滤(比如)预回迁查询集,请进行相应的调整

否则,
queryset
参数将采用标准的
queryset
实例,因此您可以使用它来构建更复杂的过滤器

例如,如果您的查询不能很容易地满足(…)
过滤器中的
,那么在
查询的基础上使用
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')
    )))
最后但并非最不重要的一点是,如果您在
ipv4s
关系的
ip
列中筛选问题,则不需要在相同条件下进一步筛选预取!这已经局限于同一个过滤器,因此只需使用:

filter(ipv4s__ip__in=(ip, '1.1.1.1')).prefetch_related('ipv4s')

.prefetch_related('ipv4s')
将预取
IPv4Manage
对象,这些对象连接到
filter()
返回的问题,因此它们已被限制为相同的
ip
列值。

查询中使用
;您基本上是在
中选择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\uuu ip\uu in
ip\uu in
过滤器。如果您只想过滤(比如)预回迁查询集,请进行相应的调整

否则,
queryset
参数将采用标准的
queryset
实例,因此您可以使用它来构建更复杂的过滤器

例如,如果您的查询不能很容易地满足(…)
过滤器中的
,那么在
查询的基础上使用
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')
    )))
最后但并非最不重要的一点是,如果您在
ipv4s
关系的
ip
列中筛选问题,则不需要在相同条件下进一步筛选预取!这已经局限于同一个过滤器,因此只需使用:

filter(ipv4s__ip__in=(ip, '1.1.1.1')).prefetch_related('ipv4s')
.prefetch_related('ipv4s')
将预取
IPv4Manage
对象,这些对象连接到
filter()
返回的问题,因此它们已被限制为相同的
ip
列值。

可能重复的问题也被过滤了吗?或者只是预回迁?可能是重复的,那么你的问题也被过滤了吗?还是只有预回迁?