2013-08-13 1 views
0

저는 장고 모델에 대해 배우려면 여전히 많은 것을 가지고 있습니다. 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'에 속하지 않습니다 Page의 방법은 allowed_users입니다 가정? – karthikr

+0

allowed_users은 (는) 페이지에 속합니다. – Koed00

답변

0

두 배 밑줄 구문을 사용하여 관계를 트래버스 할 수 있습니다.

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

우수. 이것은 내가보고 있었던 바로 그 것이다. – Koed00