优化ManyToMany(ToMany)Django查询

时间:2013-08-13 15:50:35

标签: django django-models django-orm

我还有很多关于Django模型的知识,所以要温柔。 考虑这个模型:

from django.db import models
from django.contrib.auth.models import User

class Community(models.Model):
    users = models.ManyToManyField(User)

class Portal(models.Model):
    community = models.ForeignKey(Community, blank=True, null=True)

class Page(models.Model):
    portals = models.ManyToManyField(Portal, null=True)

因此页面可以在许多门户中。每个门户网站都有一个社区,社区拥有许多用户。 现在我正在尝试查找与单个页面相关的所有用户:

def allowed_users(self):
    return User.objects.filter(community__in=Community.objects.filter(portal__in=self.portals.all()))

这很有效,但我确信有更有效的方法。可能是Q或F. 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您可以使用双下划线语法来遍历关系。假设allowed_usersPage上的方法:

User.objects.filter(community__portal__page=self)
相关问题