【问题标题】:SyntaxError: keyword argument repeatedSyntaxError:关键字参数重复
【发布时间】:2017-03-17 04:03:50
【问题描述】:

我有以下查询集,

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

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

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:

    您可以只链接排除项:

    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)
    

    【讨论】:

    • 链可以工作。我想知道是否有任何运营商可以这样做。
    • 有。添加了一个替代选项,它在 Q 对象上使用 | 运算符。不过,我认为链接更具可读性。
    猜你喜欢
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 2017-11-26
    相关资源
    最近更新 更多