我有以下查询集,
site_list = SiverifyVerificationSite.objects.filter(pattern_id=int(p_id), if_target=bundle.obj.pattern.if_target).exclude(ptrf__istartswith='ptrf-mt23run1-')
如果我给出一个排除过滤器,它会起作用,而如果我在排除过程中包含第二个过滤器,则抛出它(SyntaxError:关键字参数重复)。理想情况下,我想要的是,
site_list = SiverifyVerificationSite.objects.filter(pattern_id=int(p_id), if_target=bundle.obj.pattern.if_target).exclude(ptrf__istartswith='ptrf-mt23run1-', ptrf__istartswith='ptrf-20251-')
有没有运营商这样做。谢谢。
答案 0 :(得分:3)
您可以将排除链接起来:
qs = qs.exclude(ptrf__istartswith='ptrf-mt23run1-')
qs = qs.exclude(ptrf__istartswith='ptrf-20251-')
它不会以这种方式引起任何额外的查询 - Django将不会在必要时评估查询集。
另一种方法是使用Q
个对象构建过滤器。
from django.db.models import Q
q = Q(ptrf__istartswith='ptrf-mt23run1-') | Q(ptrf__istartswith='ptrf-20251-')
qs = qs.exclude(q)