语法错误:关键字参数重复

SUR*_*HAN 8 python django arguments repeat django-queryset

我有以下查询集:

site_list = SiverifyVerificationSite.objects.filter(pattern_id=int(p_id), if_target=bundle.obj.pattern.if_target).exclude(ptrf__istartswith='ptrf-mt23run1-')
Run Code Online (Sandbox Code Playgroud)

如果我给出一个排除过滤器,它会起作用,而如果我在排除中包含第二个过滤器,它会抛出(语法错误:关键字参数重复)。理想情况下我想要的是:

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-') 
Run Code Online (Sandbox Code Playgroud)

有没有运营商可以做这个。谢谢。

wim*_*wim 7

您可以将排除链接起来:

qs = qs.exclude(ptrf__istartswith='ptrf-mt23run1-')
qs = qs.exclude(ptrf__istartswith='ptrf-20251-')
Run Code Online (Sandbox Code Playgroud)

这样它不会导致任何额外的查询 - Django 在必要时不会评估查询集。

另一种方法是使用对象构建过滤器Q

from django.db.models import Q
q = Q(ptrf__istartswith='ptrf-mt23run1-') | Q(ptrf__istartswith='ptrf-20251-')
qs = qs.exclude(q)
Run Code Online (Sandbox Code Playgroud)

  • 有。添加了在“Q”对象上使用“|”运算符的替代选项。不过,我认为链接更具可读性。 (2认同)