Отрицание запроса Django

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

например.

q=Q(name__notcontains="SomeString")

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

Есть ли некоторый синтаксис, который я пропускаю?

Слова благодарности.

29
задан Daniel Gollás 3 February 2010 в 19:43
поделиться

3 ответа

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

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

("дайте мне все записи ИСКЛЮЧИТЬ те, в которых имена содержат "SomeString")

И когда вы имеете дело с объектом Q, вы можете использовать символ "~" перед объектом Q, чтобы представить отрицание. Например, следующее утверждение означает "дайте мне все записи с именами, содержащие "Слон", но НЕ содержащие "SomeString":

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

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

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

("дайте мне все записи, ИСКЛЮЧАЙТЕ записи с именами, содержащие "Слон", но НЕ содержащие "SomeString")

62
ответ дан 28 November 2019 в 01:11
поделиться

Сфера определяется любым набором из четырех некопланарных точек. Предполагая, что вы используете четырехстороннюю пирамиду для вашего усеченного тела, есть 70 возможных наборов из четырех точек. Попробуйте все 70 сфер и посмотрите, какая из них самая маленькая.

Учитывая, что ваша усеченная часть, вероятно, имеет некоторые симметрии, вы, вероятно, можете выбрать четыре точки на противоположных углах и использовать решение плинтуса.

-121--3126660-

Я бы добавил div для очистки поплавков:

<div id="top div" style="width:400px;">
<div style="float:left;"><img src="images/xlab.jpg" width="100px" height="200px" /></div>
<div style="float:right;"><img src="images/ucbseal.jpg" width="100px" height="250px" /></div>
<div style="clear:both;"></div>
</div>

<div id="bottom div"><img src="images/xlab.jpg" width="200px" height="200px" /></div>
-121--3260466-

Вот ссылка на API QueySet . исключить , похоже, делает то, что вы хотите.

3
ответ дан 28 November 2019 в 01:11
поделиться

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

2
ответ дан 28 November 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: