SyntaxError: аргумент ключевого слова повторен

У меня есть следующий набор запросов,

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

Есть ли операторы для этого. Благодарю.

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)

Я получил ту же ошибку ниже:

SyntaxError: повторяется аргумент ключевого слова: post__contains

При написании кода filter( ) с 2post__containsаргументы в test()view для запуска оператора , как показано ниже:

      # "store/views.py"

from .models import Blog
from django.http import HttpResponse

def test(request):
    # Here
    qs = Blog.objects.filter(
             post__contains="popular", post__contains="simple"
         )      # ↑ ↑ ↑ Here ↑ ↑ ↑        # ↑ ↑ ↑ Here ↑ ↑ ↑
    print(qs)

    return HttpResponse("Test")

Итак, я использовалили Q() и &бежать ANDоператор с filter()как показано ниже:

      # "store/views.py"

from .models import Blog
from django.db.models import Q
from django.http import HttpResponse

def test(request):

    # With "&"
                                                     # ↓ Here
    qs = Blog.objects.filter(post__contains="popular") & \
         Blog.objects.filter(post__contains="simple")
    print(qs)

    # With "Q()" and "&" 
                           # ↓ Here                    # ↓ Here
    qs = Blog.objects.filter(Q(post__contains="popular") & 
                             Q(post__contains="simple"))
    print(qs)              # ↑ Here

    return HttpResponse("Test")

Затем ошибка выше была решена:

      <QuerySet [<Blog: Python is popular and simple.>]> # With "&"
<QuerySet [<Blog: Python is popular and simple.>]> # With "Q()" and "&"
[22/Dec/2022 12:08:22] "GET /store/test/ HTTP/1.1" 200 9
Другие вопросы по тегам