Niezależnie od tego, czy robisz to za pośrednictwem menedżera, czy funkcji ogólnej, możesz również chcieć złapać `` MultipleObjectsReturned '' w instrukcji TRY, ponieważ funkcja get () podniesie to, jeśli twoje kwargs pobiorą więcej niż jeden obiekt.
Opierając się na funkcji ogólnej:
def get_unique_or_none(model, *args, **kwargs):
try:
return model.objects.get(*args, **kwargs)
except (model.DoesNotExist, model.MultipleObjectsReturned), err:
return None
aw menedżerze:
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