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

3 投票
1 回答
883 浏览
提问于 2025-04-16 14:30

我有一个模型应用,它和用户之间有多对多的关系。这里是代码。

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 个回答

3

这样做效率很低:它会获取所有相关的用户,然后一个一个地遍历。

ManyToManyField会返回一个查询集(queryset)。所以你可以使用普通的查询集过滤方法,这样就能用一个命令完成所有操作:

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

注意,这里使用了exists()方法,它直接从数据库返回一个布尔值,而不是去评估实际的对象。

撰写回答