get () исключает MultipleObjectsReturned для поля, помеченного как уникальное - PullRequest
3 голосов
/ 21 июля 2011

У меня есть поле на модели, помеченное как уникальное:

uid = models.CharField(max_length=255, blank=False, null=False, unique=True)

Я пытаюсь использовать get (), чтобы получить профиль, который должен соответствовать этому uid:

UserProfile.objects.get(uid=fr_uid)

Проблема в том, что эта строка вызывает исключение MultipleObjectsReturned для некоторых пользователей, даже если это поле помечено как уникальное:

Line: return self.get_query_set().get(*args, **kwargs)

Local variables:
clone   [<Profile: John Smith>, <Profile: John Smith>]
num     2

Если я получаю тот же профиль из оболочки, я получаю только один обратно:

Profile.objects.get(uid='abc1234')
<Profile: John Smith>

Теперь я понимаю, что в любом случае, вероятно, мне следует обработать исключение MultipleObjectsReturned, но я не могу понять, почему я могу получить несколько объектов, возвращенных в поле, помеченное как уникальное.

1 Ответ

1 голос
/ 21 июля 2011

Были ли внесены какие-либо изменения в менеджера? Или вы выполняете какую-либо фильтрацию набора запросов перед тем, как вызывать get() для него? В частности, использование Q объектов для логических поисков ИЛИ часто может привести к тому, что один и тот же объект будет возвращен несколько раз. Если это так, вызовите distinct() в наборе запросов до get().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...