В Django вы можете использовать исключение для создания SQL, похожего на not equal
. Примером может быть.
Model.objects.exclude(status='deleted')
Теперь это прекрасно работает, а исключение очень гибкое. Поскольку я немного ленив, я хотел бы получить эту функциональность при использовании get_object_or_404
, но я не нашел способа сделать это, так как вы не можете использовать исключение на 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
для получения желаемого результата?