2017-03-17 19 views
2

我有以下查询集,语法错误:关键字参数重复

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-') 

是否有任何运营商来做到这一点。谢谢。

回答

2

你可能只是链不包括:

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) 
+0

连锁店将工作。我想知道是否有任何运营商可以做到这一点。 –

+0

有。增加了一个替代选项,它在'Q'对象上使用'|'运算符。不过,我认为链接更具可读性。 – wim

相关问题