django: 选择具有特定属性的多对多对象的最佳方法
我有一个模型应用,它和用户之间有多对多的关系。这里是代码。
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()
方法,它直接从数据库返回一个布尔值,而不是去评估实际的对象。