我有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的pythonic方式是什么?
我正按以下方式尝试:
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)
但是,从那里,我如何映射到具有organization
作为订阅的用户?
我正试图像这样映射:
users = User.objects.filter(subscribed_orgs__in=...
答案 0 :(得分:1)
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
。