Django ORM select 存在外键的不同模型列表

Django ORM select distinct list of models where a foreign key exists

在我的 Django 项目中,我有两个模型通过外键关系相互连接:

Invite (has one Event) to Event (has many invites)

我能够 select 我关心的相关邀请列表如下:

invites = Invite.objects.filter(guest = guest)

我可以访问每个邀请的每个事件,但这可能会导致重复。从上面,我想得到一个唯一的事件列表。

型号如下:

models.py

class Invite(models.Model):

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

    event = models.ForeignKey(Event, on_delete=models.CASCADE)
    guest = models.ForeignKey(Guest, on_delete=models.CASCADE)

    rsvp_attendance = models.BooleanField(blank=True, null=True)

class Event(models.Model):
    
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=100)

    

实现此目标的最佳方法是什么?

您可以使用 Exists 表达式,如下所示:

Event.objects.filter(Exists(Invite.objects.filter(event=OuterRef('pk'))))

这将为您提供所有活动,这些活动经过过滤,因此至少有一个邀请必须引用一个活动。

OuterRef 是子查询的一部分,引用您实际要匹配的对象。 documentation

中提供了有关子查询和存在的更多详细信息

试试:

Events.objects.filter(invite__guest = guest)

这会选择一个活动列表,其中包含对给定客人的邀请