2012-03-10 2 views
1

가입자가 다양한 목록에 가입하는 위치에 앱이 있습니다. 도메인은 List Model/SubscriberModel/ListSubscription 모델입니다. 이 코드는 모든 가입자를 얻기 위해 나를 수 있지만 Django : filter ManyToMany join

리스트 클래스 정의

나는 단지 그들 중 일부가 필요, 다음 줄을

subscribers = models.ManyToManyField(Subscriber, through='ListSubscription') 

가 포함되어 있습니다. 그 트릭은 ListSubscription 클래스가 활성 또는 비활성 인 구독을 식별하는 "is_active"부울 필드를 포함한다는 것입니다. "to_active = True"를 추가하는 몇 가지 방법이 있습니까? 일반 SQL에서이 조건을 조인 절에 추가했지만 장고 ORM 방법에 대해서는 확실하지 않습니다.

여기에 이상적인 결과는 각각 * 활성 "가입자 모든 목록을 얻을 수있는 검색어 세트를 가질 수있을 것이다.

답변

1

ManyToMany 필드가 이미의 검색어, 그래서 활성 가입자를 원한다면 당신은 그냥 호출 할 수는 .

class List(models.Model): 
    # ... etc ... 
    @property 
    def active_subscribers(self): 
     return self.subscribers.filter(listsubscription__is_active = True) 

는, 적어도 하나의 액티브 가입자와 목록을 반환이 쿼리를 사용하려면 : 아마 List 클래스의 메소드를 통해 filter 방법은 through 표 목표 테이블과 동일한 방식으로 필터링에 사용할

List.objects.filter(listsubscription__is_active = True)