Dans Django, vous pouvez utiliser l'exclure pour créer un code SQL similaire à not equal
. Un exemple pourrait être.Comment exclure les résultats avec get_object_or_404?
Model.objects.exclude(status='deleted')
Maintenant, cela fonctionne très bien et l'exclusion est très flexible. Depuis que je suis un peu paresseux, je voudrais obtenir cette fonctionnalité lors de l'utilisation get_object_or_404
, mais je n'ai pas trouvé un moyen de le faire, car vous ne pouvez pas utiliser exclure sur get_object_or_404
.
Ce que je veux est de faire quelque chose comme ceci:
model = get_object_or_404(pk=id, status__exclude='deleted')
Mais malheureusement cela ne fonctionne pas car il n'y a pas d'exclure le filtre de requête ou similaire. Le meilleur que je suis venu avec à ce jour fait quelque chose comme ceci:
object = get_object_or_404(pk=id)
if object.status == 'deleted':
return HttpResponseNotfound('text')
Faire quelque chose comme ça, défaites vraiment le point d'utiliser get_object_or_404
, car il n'est en une ligne à portée de main.
Sinon je pouvais faire:
object = get_object_or_404(pk=id, status__in=['list', 'of', 'items'])
Mais ce ne serait pas très maintenable, comme je l'aurais besoin de garder la liste à jour.
Je me demande si je manque un truc ou une fonctionnalité dans django pour utiliser get_object_or_404
pour obtenir le résultat souhaité?
Ce n'est pas vraiment une réponse, mais il semble que vous ne voudriez pas vraiment 404 pour un objet supprimé. Le point entier de la suppression douce est de garder l'objet autour "juste au cas où". –