我有一个模型应用程序,它与用户有很多很多关联。这是代码。
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
我该如何改进?
答案 0 :(得分:3)
效率非常低:它会获得所有相关用户并进行迭代。
ManyToManyField返回一个查询集。因此,您可以使用常规查询集过滤方法,在单个命令中执行所有操作:
return self.app.users.filter(user=user_obj).exists()
请注意,这使用exists()
方法直接从数据库返回bool,而不是评估实际对象。