2013-02-07 147 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