In Django è possibile utilizzare l'esclusione per creare SQL simile a not equal
. Un esempio potrebbe essere.Come escludere i risultati con get_object_or_404?
Model.objects.exclude(status='deleted')
Ora questo funziona perfettamente ed è molto flessibile. Poiché sono un po 'pigro, mi piacerebbe avere questa funzionalità quando uso get_object_or_404
, ma non ho trovato un modo per farlo, dal momento che non è possibile utilizzare l'esclusione su get_object_or_404
.
Quello che voglio è quello di fare qualcosa di simile:
model = get_object_or_404(pk=id, status__exclude='deleted')
Ma purtroppo questo non funziona in quanto non v'è un filtro di query escludere o simili. Il migliore che è venuta in mente finora sta facendo qualcosa di simile:
object = get_object_or_404(pk=id)
if object.status == 'deleted':
return HttpResponseNotfound('text')
fare qualcosa del genere, in realtà sconfigge il punto di usare get_object_or_404
, dal momento che non è più un comodo one-liner.
In alternativa avrei potuto fare:
object = get_object_or_404(pk=id, status__in=['list', 'of', 'items'])
Ma non sarebbe molto mantenibile, come avrei bisogno di mantenere l'elenco aggiornato.
Mi chiedo se mi manca qualche trucco o funzione in django per utilizzare get_object_or_404
per ottenere il risultato desiderato?
Non è davvero una risposta, ma sembra che in realtà non si voglia 404 per un oggetto eliminato. L'intero punto della cancellazione soft è di mantenere l'oggetto intorno "nel caso in cui". –