Django - 加入特定列

Django - Join on specific column

我有一个模型,我们称它为Notification。通知有一个 from_user 和一个 to_user 以及其他现在不重要的字段。

class Notification(models.Model):
    from_user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name='from_user'
    )
    to_user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name='to_user'
    )
    read = models.BooleanField(default=False)
    ...

我想实现的是,理论上很简单,但我无法让它工作。 我想获取每个用户的未读通知数。

以下 Django ORM 表达式:

User.objects.annotate(
    notification_count=Count('notification', filter=(Q(notification__read=False)))
).values('notification_count')

产生以下 SQL:

SELECT COUNT("notification"."id") FILTER (WHERE "notification"."read" = False) AS "notification_count" 
FROM "account" 
LEFT OUTER JOIN "notification" ON ("account"."id" = "notification"."from_user_id") 
GROUP BY "account"."id" 
ORDER BY "account"."member_since" DESC

但这不是我想要的。我希望 LEFT_OUTER_JOINto_user 列而不是 from_user 列上完成。

如何使用 Django ORM 实现此目的?

在尝试了无数次之后,我找到了解决方案。在这里,对于任何需要它的人:

User.objects.annotate(
    notification_count=Count('to_user', filter=(Q(to_user__read=False)))
).values('notification_count')