gpt4 book ai didi

mysql - 跨两个 ManyToMany 字段进行过滤

转载 作者:行者123 更新时间:2023-11-29 12:56:13 25 4
gpt4 key购买 nike

我有一个User 模型和一个Event 模型。我对两者都有以下内容:

class Event(models.Model):
...
timestamp = models.DateTimeField()
organization_map = models.ManyToManyField(Organization)

class User(AuthUser):
...
subscribed_orgs = models.ManyToManyField('Organization')

我想查找在特定时间范围内创建的所有事件,并查找订阅这些组织的用户。我知道如何为此编写 SQL(非常简单),但是使用 Django ORM 执行此操作的 Python 方式是什么?

我正在尝试如下:

orgs = Organization.objects.all()
events = Event.objects.filter(timestamp__gt=min_time) # Min time is the time I want to start from
events = events.filter(organization_map__in=orgs)

但是从那里,我如何映射到订阅该组织的用户?

我正在尝试像这样映射它:

users = User.objects.filter(subscribed_orgs__in=...

最佳答案

Django 可以一次连接多个表,因此您应该能够一步执行 users 查询:

events = Event.objects.filter(timestamp__gt=min_time)
users = User.objects.filter(subscribed_orgs__event__in=events).distinct()

(distinct() 是必要的,因为用户可以通过多种方式进行匹配。)

由于您知道要查找的 SQL,因此您可以随时检查 Django 生成的 SQL,看看它是否符合您的直觉。查看Django Debug Toolbar或使用connection.queries直接。

关于mysql - 跨两个 ManyToMany 字段进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24024982/

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