Если вы просто хотите получить один экземпляр, используйте get
, а не filter
:
employee = Employee.objects.get(age = 99)
Если этого не существует, вы получитеEmployee.DoesNotExist
исключение, которое вам нужно поймать.Если существует более одного 99-летнего сотрудника, вы получите исключение Employee.MultipleObjectsReturned, которое вы можете захотеть отловить.
Всегда есть django-раздражающий 's get_object_or_None
если вам лень!
from annoying.functions import get_object_or_None
obj = get_object_or_None(Employee, age=99)
Если вы не хотите использовать все раздражающие django, вы всегда можете добавить get_object_or_None
где-нибудь, это просто выглядит так:
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