11👍
✅
If you just want to get a single instance, use get
, not filter
:
employee = Employee.objects.get(age = 99)
If that doesn’t exist, you’ll get a Employee.DoesNotExist
exception, which you’ll need to catch. If there’s more than one 99 year-old employee, you’ll get a Employee.MultipleObjectsReturned exception, which you may want to catch.
There’s always django-annoying‘s get_object_or_None
if you’re feeling lazy!
from annoying.functions import get_object_or_None
obj = get_object_or_None(Employee, age=99)
If you don’t want to use all of django-annoying, you can always add get_object_or_None
somewhere, it just looks like this:
def get_object_or_None(klass, *args, **kwargs):
"""
Uses get() to return an object or None if the object does not exist.
klass may be a Model, Manager, or QuerySet object. All other passed
arguments and keyword arguments are used in the get() query.
Note: Like with get(), a MultipleObjectsReturned will be raised if
more than one object is found.
"""
queryset = _get_queryset(klass)
try:
return queryset.get(*args, **kwargs)
except queryset.model.DoesNotExist:
return None
8👍
On Django >= 1.6 there’s the first
method, so you can just do:
employee = Employee.objects.filter(age=99).first()
Note, however, that this only makes sense if you know the QuerySet is guaranteed to return either 1 or 0 results.
- Django: foreign key value in a list display admin
- Custom label on ModelChoiceField form field
- How to get data from database without models in django?
- Determining Django Model Instance Types after a Query on a Base-class
- ProgrammingError: column "product" is of type product[] but expression is of type text[] enum postgres
Source:stackexchange.com