2013-02-07 236 views
0

可以說我有用戶,通訊和訂閱模型,訂閱是用戶和時事通訊的映射表,例如。認購有外鍵,用戶和通訊Django模型manytomany過濾器

class User(models.Model): 
    ... 

class Newsletter(models.Model): 
    ... 

class Subscription(models.Model): 
    subscriber = models.ForeignKey(User) 
    newsletter = models.ForeignKey(Newsletter) 

我如何查詢集返回時事特定用戶已經在一個非常簡單的查詢訂閱?我覺得有一個,但不能真正想到它,除非通過多個陳述來實現這一點。

回答

1

這應該工作:

Newsletter.objects.filter(
    id__in=[subscription.newsletter.id for subscription in 
      Subscription.objects.filter(subscriber=user)] 

更可讀(和冗長的)版本:

subscriptions = Subscription.objects.filter(subscriber=user) # all subscriptions for a given user 

newsletter_ids = [subscription.newsletter.id for subscription in subscriptions] 

Newsletter.objects.filter(id__in=newsletter_ids) # answer