У меня иногда есть потребность удостовериться, что некоторые экземпляры исключены из 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)
Который не работает. Но я читал здесь на том, Так, чтобы подзапрос мог использоваться в качестве параметра для, исключают.
Я не повезло? Я отсутствую, некоторая функциональность (проверил документы, но не нашел полезного указателя),
Лучше всего то, что вы уже делаете.
Если вы ищете независимый от модели способ сделать это, не забывайте, что вы можете выполнить query.exclude (pk = instance.pk)
.
Кстати, , если ORM Django имеет средство сопоставления идентификационных данных (которого в настоящее время нет), то вы могли бы сделать что-то вроде MyModel.objects.filter (< query>). all (). remove (
, но вам не повезло в этом отношении. То, как вы это делаете (или то, что указано выше) - лучшее, что у вас есть.
Да, еще вы можете сделать намного лучше, чем этот в
запросе с пониманием списка: query.exclude (id__in = [o.id for o in <нежелательные объекты>])