Вопрос

Я знаю, как создавать фильтры и Q объекты в Django, но я не знаю, как отрицать операторы, которые API обеспечивает, например, для оператора содержимого, который я хотел бы что-то вроде не совсем не совсем.

например

q=Q(name__notcontains="SomeString")

Это позволит мне все объекты, чье имя не содержит «самых».

Есть ли синтаксис, который мне не хватает?

Спасибо.

Это было полезно?

Решение

Вы можете использовать exclude() на месте filter():

Entry.objects.exclude(name__contains="SomeString")

(«Дайте мне все записи, кроме тех, которые с names содержащий «самую»)

И при работе с объектом q вы можете использовать символ «~» перед объектом Q для представления отрицания. Например, следующее утверждение означает «дать мне все записи с names содержащий «слон», но не содержащий «SOOTRING»:

Entry.objects.filter(Q(name__contains="Elephant") & ~Q(name__contains="SomeString"))

В некоторых случаях вы можете использовать оба метода:

Entry.objects.exclude(Q(name__contains="Elephant") & ~Q(name__contains="SomeString"))

(«Дайте мне все записи, кроме тех, кто с names содержащий «слон», но не содержащий «SOOTRING»)

Другие советы

Вот то Справочник запросов к запросу API. exclude кажется, делает то, что вы хотите.

Либо использовать exclude как Хэнк предлагает или, для конкретного contains Корпус, используйте q (имя__regex = R '! (SomeString)'), если вам действительно действительно нужно использовать filter. Отказ Быть предупрежденным, хотя это regex Не содержит база данных, проверьте, какой синтаксис поддерживает вашу БД первым.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top