How to exclude results with get_object_or_404?

Posted by googletorp on Stack Overflow See other posts from Stack Overflow or by googletorp
Published on 2010-06-15T15:03:58Z Indexed on 2010/06/15 15:22 UTC
Read the original article Hit count: 216

Filed under:
|
|

In Django you can use the exclude to create SQL similar to not equal. An example could be.

Model.objects.exclude(status='deleted')

Now this works great and exclude is very flexible. Since I'm a bit lazy, I would like to get that functionality when using get_object_or_404, but I haven't found a way to do this, since you cannot use exclude on get_object_or_404.

What I want is to do something like this:

model = get_object_or_404(pk=id, status__exclude='deleted')

But unfortunately this doesn't work as there isn't an exclude query filter or similar. The best I've come up with so far is doing something like this:

object = get_object_or_404(pk=id)
if object.status == 'deleted':
    return HttpResponseNotfound('text')

Doing something like that, really defeats the point of using get_object_or_404, since it no longer is a handy one-liner.

Alternatively I could do:

object = get_object_or_404(pk=id, status__in=['list', 'of', 'items'])

But that wouldn't be very maintainable, as I would need to keep the list up to date.

I'm wondering if I'm missing some trick or feature in django to use get_object_or_404 to get the desired result?

© Stack Overflow or respective owner

Related posts about python

Related posts about django