【问题标题】:Optimizing ManyToMany (ToMany) Django query优化多对多(ToMany) Django 查询
【发布时间】:2013-08-13 15:50:35
【问题描述】:

关于 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。 任何帮助表示赞赏。

【问题讨论】:

  • allowed_users属于哪个型号?
  • allowed_users 属于页面

标签: django django-models django-orm


【解决方案1】:

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

User.objects.filter(community__portal__page=self)

【讨论】:

  • 优秀。这正是我所期待的
猜你喜欢
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 2017-06-29
  • 2011-12-31
  • 2021-09-04
  • 1970-01-01
相关资源
最近更新 更多