通过Django中的Relationship字段过滤多对多关系

时间:2012-10-15 07:48:41

标签: django filtering django-orm

我正在尝试通过某些字段来过滤多对多关系。

引用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)

在此示例中,我的目标应该是过滤多对多关系,并且只获取从某个日期开始加入某些 date_joined字段< /强>)。

有可能吗?

2 个答案:

答案 0 :(得分:34)

你可以使用django ORM query across relationships(或者在这种情况下是相反的关系):

person = Person.objects.filter(
    membership__group=example_group,
    membership__date_joined__gte=example_date
)

答案 1 :(得分:0)

您也可以这样做:

person = example_group.members.filter(
    membership__date_joined__gte=example_date
)