gpt4 book ai didi

python - 在不相关的 Django 模型上执行 SQL JOIN?

转载 作者:太空宇宙 更新时间:2023-11-03 14:35:04 25 4
gpt4 key购买 nike

我有 2 个模型,用户 (django.contrib.auth.models.User) 和一个名为 Log 的模型。两者都包含一个“电子邮件”字段。 Log 没有指向 User 模型的 ForeignKey。我试图弄清楚如何使用电子邮件字段作为共性对这两个表执行 JOIN。

基本上我希望能够执行 2 个查询。用于过滤的基本连接

#Get all the User objects that have related Log objects with the level parameter set to 3.
User.objects.filter(log__level=3)

我也想做一些聚合。

User.objects.all().anotate(Count('log'))

当然,如果能反过来就好了。

log = Log.objects.get(pk=3)
log.user...

有没有办法用 ORM 做到这一点?也许我可以向模型的 Meta 类添加一些东西来“激活”关系?

谢谢!

最佳答案

您可以使用 MonkeyPatching/DuckPunching 在 User 类上添加一个额外的方法:

def logs(user):
return Log.objects.filter(email=user.email)

from django.contrib.auth.models import User
User.logs = property(logs)

现在,您可以查询用户,并要求附加日志(例如,在 View 中):

user = request.user
logs = user.logs

这种类型的过程在 Ruby 世界中很常见,但在 Python 中似乎不受欢迎。

(前几天我遇到了 DuckPunching 术语。它基于 Duck Typing,我们不关心某物是什么类别:如果它像鸭子一样嘎嘎叫,就我们而言它就是鸭子很担心。如果你打它时它不嘎嘎叫,继续打直到它嘎嘎叫)。

关于python - 在不相关的 Django 模型上执行 SQL JOIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2328493/

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