2013-08-13 4 views
0

Мне еще многое предстоит узнать о моделях Django, поэтому будьте нежны. Рассмотрим эту модель:Оптимизация ManyToMany (ToMany) Запрос 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. Любая помощь приветствуется.

+0

, какая модель делает 'allowed_users' принадлежат? – karthikr

+0

allowed_users принадлежит к странице – Koed00

ответ

0

Вы можете использовать синтаксис двойного подчеркивания для обхода отношений. Предполагая, что allowed_users является метод на Page:

User.objects.filter(community__portal__page=self) 
+0

Отлично. Это было то, что я смотрел – Koed00

Смежные вопросы