Независимо от того, выполняете ли вы это через менеджер или общую функцию, вы также можете захотеть поймать MultipleObjectsReturned в операторе TRY, поскольку функция get () поднимет это, если ваши kwargs извлекут более одного объекта.
Основываясь на общей функции:
def get_unique_or_none(model, *args, **kwargs):
try:
return model.objects.get(*args, **kwargs)
except (model.DoesNotExist, model.MultipleObjectsReturned), err:
return None
и в диспетчере:
class GetUniqueOrNoneManager(models.Manager):
"""Adds get_unique_or_none method to objects
"""
def get_unique_or_none(self, *args, **kwargs):
try:
return self.get(*args, **kwargs)
except (self.model.DoesNotExist, self.model.MultipleObjectsReturned), err:
return None