Подтвердить что ты не робот

Отказ от ответа на Django

Я знаю, как создавать фильтры и объекты Q в django, но я не знаю, как отменить операторы, которые предоставляет API, например, для оператора contains. Мне бы хотелось что-то вроде notcontains.

например.

q=Q(name__notcontains="SomeString")

Это даст мне все объекты, имя которых не содержит "SomeString".

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

Thankyou.

4b9b3361

Ответ 1

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

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

( "дайте мне все записи. ИСКЛЮЧИТЕ те, у кого names, содержащие" SomeString ")

И при работе с Q-объектом вы можете использовать символ ~ ~ перед объектом Q, чтобы представлять отрицание. Например, следующая инструкция означает "дать мне все записи с names, содержащие" Elephant ", но NOT содержит" SomeString ":

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

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

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

( "дайте мне все записи, ЗА ИСКЛЮЧЕНИЕМ тех, у кого names содержит" Слон ", но НЕ содержит" SomeString ")

Ответ 3

Используйте либо exclude, как предлагает Хэнк, или для конкретного случая contains используйте Q (name__regex = r '! (SomeString)'), если вам действительно нужно использовать filter. Будьте осторожны, хотя regex не агностирован для базы данных, проверьте, какой синтаксис поддерживает ваш db.