在Django中按关系字段过滤多对多关系
Posted
技术标签:
【中文标题】在Django中按关系字段过滤多对多关系【英文标题】:Filtering Many-to-Many relationship by Relationship field in Django 【发布时间】:2012-10-05 04:07:28 【问题描述】:我正在尝试通过一些通过类字段过滤多对多关系。
引用 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 字段)。
有可能吗?
【问题讨论】:
【参考方案1】:您可以query across relationships 与 django ORM(或在本例中为反向关系):
person = Person.objects.filter(
membership__group=example_group,
membership__date_joined__gte=example_date
)
【讨论】:
这比我们做不到的有点棘手Group.objects.filter(members__date_joined=...)
,所有的查询都是从模型中的显式字段进行的。非常感谢【参考方案2】:
你也可以这样做:
person = example_group.members.filter(
membership__date_joined__gte=example_date
)
【讨论】:
以上是关于在Django中按关系字段过滤多对多关系的主要内容,如果未能解决你的问题,请参考以下文章
如何在引导选项卡块中按 django 模板中的多对多字段过滤对象
如何在 Eloquent ORM 中按多对多关系的数据透视表的字段进行排序