django:选择具有特定属性的多个对象的最佳方式

时间:2011-03-27 09:27:04

标签: python django django-models

我有一个模型应用程序,它与用户有很多很多关联。这是代码。

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

现在我想检查具有特定“id”的Django用户是否在此应用的用户列表中退出。经过一些点击和试验,我找到了解决方案。

 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 个答案:

答案 0 :(得分:3)

效率非常低:它会获得所有相关用户并进行迭代。

ManyToManyField返回一个查询集。因此,您可以使用常规查询集过滤方法,在单个命令中执行所有操作:

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

请注意,这使用exists()方法直接从数据库返回bool,而不是评估实际对象。