Django, исключая определенные экземпляры от queryset, не используя полевой поиск

У меня иногда есть потребность удостовериться, что некоторые экземпляры исключены из queryset.
Это - способ, которым я обычно делаю это:

unwanted_instance = MyModel.objects.get(pk=bad_luck_number)
uninteresting_stuff_happens()
my_results = MyModel.objects.exclude(id=unwanted_instance.id)

или, если у меня есть больше из них:

my_results = MyModel.objects.exclude(id_in=[uw_in1.id, uw_in2.id, uw_in3.id])

Это 'чувствует себя' немного неуклюжим, таким образом, я попробовал:

my_ideally_obtained_results = MyModel.objects.exclude(unwanted_instance)

Который не работает. Но я читал здесь на том, Так, чтобы подзапрос мог использоваться в качестве параметра для, исключают.
Я не повезло? Я отсутствую, некоторая функциональность (проверил документы, но не нашел полезного указателя),

35
задан Community 23 May 2017 в 12:25
поделиться

1 ответ

Лучше всего то, что вы уже делаете.

Если вы ищете независимый от модели способ сделать это, не забывайте, что вы можете выполнить query.exclude (pk = instance.pk) .

Кстати, , если ORM Django имеет средство сопоставления идентификационных данных (которого в настоящее время нет), то вы могли бы сделать что-то вроде MyModel.objects.filter (< query>). all (). remove () , но вам не повезло в этом отношении. То, как вы это делаете (или то, что указано выше) - лучшее, что у вас есть.

Да, еще вы можете сделать намного лучше, чем этот в запросе с пониманием списка: query.exclude (id__in = [o.id for o in <нежелательные объекты>])

71
ответ дан 27 November 2019 в 06:50
поделиться
Другие вопросы по тегам:

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