gpt4 book ai didi

sql - Django ManyToMany 与通过模型过滤的关系

转载 作者:行者123 更新时间:2023-12-05 07:15:06 25 4
gpt4 key购买 nike

假设我有以下设置 (models.py)

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


class EventInfo(models.Model):
attending = models.BooleanField(default=True)
event = models.ForeignKey('Event')
person = models.ForeignKey('Person')

class Event(models.Model):
start = models.DateTimeField(....)
....
participants = models.ManyToManyField(Person, through=EventInfo)

我知道 participants 实际上是 RelatedManager 类型的对象,我可以这样查询它:

e = Event.objects.get(...)
e.participants.filter(name="John") #gives me the Person named 'John'

但我缺少的是一种直观的方式(例如)通过使用指定的直通模型来过滤所有参加我的事件的人。我知道我可以做以下事情之一:

e = Event.objects.get(...)
# would give me a queryset of EventInfo objects, but theres no easy way to get all persons from that:
qs = EventInfo.objects.filter(event=e, attending=True)

# would give me in fact all persons, but seems rather unintuitive:
qs = Person.objects.filter(eventinfo__event=e, eventinfo__attending=True)

# same thing, quite unintuitive having to query from "the other side"
e.participants.filter(eventinfo__attending=True)

我想写什么:

e = Event.objects.get(...)
e.participants.filter(attending=True)

这会给我一份人员名单。这是不可能的,因为 participants 过滤 Person 而不是 EventInfo 我在这里错过了什么吗?

最佳答案

那么您在这里需要做的是反向外键查找。因此,要通过参与者访问 EventInfo 的属性,您必须执行以下操作。

e.participants.eventinfo_set.filter(attending=True)

关于sql - Django ManyToMany 与通过模型过滤的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59705435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com