web-dev-qa-db-ja.com

Djangoの関係フィールドによる多対多の関係のフィルタリング

through Classフィールドで多対多の関係をフィルタリングしようとしています。

Djangoドキュメントを引用して、私の目標を説明します

class Person(models.Model):
      name = models.CharField(max_length=128)

      def __unicode__(self):
          return self.name

class Group(models.Model):
      name = models.CharField(max_length=128)
      members = models.ManyToManyField(Person, through='Membership')

      def __unicode__(self):
          return self.name

class Membership(models.Model):
      person = models.ForeignKey(Person)
      group = models.ForeignKey(Group)
      date_joined = models.DateField()
      invite_reason = models.CharField(max_length=64)

この例では、私の目標は、多対多の関係をフィルタリングし、Groupに参加しているPersonのみを取得することです。特定の日付から開始します(date_joined field)。

出来ますか?

23
alesdario

次のことができます 関係全体のクエリ Django ORM(またはこの場合は逆の関係)):

person = Person.objects.filter(
    membership__group=example_group,
    membership__date_joined__gte=example_date
)
38
Timmy O'Mahony