Django: оптимальный способ выбора множества объектов с определенным атрибутом - PullRequest
3 голосов
/ 27 марта 2011

У меня есть модельное приложение, которое много-много ассоциируется с пользователями Вот код.

class app(models.Model):
    users = models.ManyToManyField(UserProfile)

Теперь я хочу проверить, присутствует ли пользователь Django с определенным 'id' в списке пользователей этого приложения. После нескольких попаданий и испытаний я нашел решение.

 def user_exists(self,user_obj):
     userset = self.app.users.all()
     for userprof in userset:
         if userprof.user == user_obj:
             return True
     return False

Как я могу улучшить это?

1 Ответ

3 голосов
/ 27 марта 2011

Это очень неэффективно: он получает всех связанных пользователей и выполняет итерации.

ManyToManyField возвращает набор запросов.Таким образом, вы можете использовать обычные методы фильтрации наборов запросов, чтобы сделать все это в одной команде:

return self.app.users.filter(user=user_obj).exists()

Обратите внимание, что при этом используется метод exists() для возврата значения bool непосредственно из базы данных, а не для оценки фактическогообъекты.

...