djangopython-2.7django-views

How to handle "matching query does not exist" when getting an object


When I want to select objects with a get() function like

personalProfile = World.objects.get(ID=personID)

If get function doesn't return find a value, a "matching query does not exist." error occurs.

If I don't need this error, I'll use try and except function

try:
   personalProfile = World.objects.get(ID=personID)
except:
   pass

But I think this is not the best way since I use

except:
      pass

Please recommend some idea or code sample to fight with this issue


Solution

  • That depends on what you want to do if it doesn't exist..

    Theres get_object_or_404:

    Calls get() on a given model manager, but it raises Http404 instead of the model’s DoesNotExist exception.

    get_object_or_404(World, ID=personID)
    

    Which is very close to the try except code you currently do.

    Otherwise theres get_or_create:

    personalProfile, created = World.objects.get_or_create(ID=personID)
    

    Although, If you choose to continue with your current approach, at least make sure the except is localised to the correct error and then do something with that as necessary

    try:
       personalProfile = World.objects.get(ID=personID)
    except MyModel.DoesNotExist:
        raise Http404("No MyModel matches the given query.")
    

    The above try/except handle is similar to what is found in the docs for get_object_or_404...