我有以下查询集,

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

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

有没有运营商可以做到这一点。谢谢。

最佳答案

您可以将排除项链接起来:

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)

关于python - 语法错误 : keyword argument repeated,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42849026/

10-12 18:16