В Django вы можете использовать exclude для создания SQL, аналогичного not equal
. Пример может быть.
Model.objects.exclude(status='deleted')
Теперь это отлично работает и исключает очень гибкий. Поскольку я немного ленив, я хотел бы получить эту функциональность при использовании get_object_or_404
, но я не нашел способ сделать это, так как вы не можете использовать exclude на get_object_or_404
.
Я хочу сделать что-то вроде этого:
model = get_object_or_404(pk=id, status__exclude='deleted')
Но, к сожалению, это не работает, поскольку нет фильтра запроса исключения или подобного. Самое лучшее, что я придумал до сих пор, - это что-то вроде этого:
object = get_object_or_404(pk=id)
if object.status == 'deleted':
return HttpResponseNotfound('text')
Выполняя что-то подобное, действительно наносит ущерб использованию get_object_or_404
, поскольку он больше не является удобным однострочным.
В качестве альтернативы я мог бы сделать:
object = get_object_or_404(pk=id, status__in=['list', 'of', 'items'])
Но это не очень удобно, так как мне нужно будет обновлять список.
Мне интересно, если мне не хватает трюка или функции в django, чтобы использовать get_object_or_404
для получения желаемого результата?