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
列值。可能重复的问题也被过滤了吗?或者只是预回迁?可能是重复的,那么你的问题也被过滤了吗?还是只有预回迁?