django模型的许多过滤器



假设我有用户、时事通讯和订阅模型,订阅是用户和时事通讯的映射表,例如,订阅有用户和时报的外键

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

如何在一个非常简单的查询中获得返回特定用户订阅的时事通讯的查询集?我觉得有一个,但除非通过多个陈述来实现这一点,否则我无法真正想到它。

这应该有效:

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

最新更新