0

User、Newsletter、Subscription モデルがあるとします。Subscription は User と Newsletter のマッピング テーブルです。サブスクリプションには、ユーザーとニュースレターへの外部キーがあります

class User(models.Model):
  ...

class Newsletter(models.Model):
  ...

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

特定のユーザーが購読しているニュースレターを返すクエリ セットを非常に単純なクエリで取得するにはどうすればよいですか? あると思いますが、これを達成するために複数のステートメントを実行しない限り、実際には考えられません。

4

1 に答える 1

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
于 2013-02-07T02:29:51.073 に答える