python-在不相关的Django模型上执行SQL JOIN吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-在不相关的Django模型上执行SQL JOIN吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1092字,纯文字阅读大概需要2分钟。
内容图文
![python-在不相关的Django模型上执行SQL JOIN吗?](/upload/InfoBanner/zyjiaocheng/886/8452193ac7564ff0bcbf61e790a0f0c6.jpg)
我有2个模型,用户(django.contrib.auth.models.User)和一个名为Log的模型.两者都包含一个“电子邮件”字段.日志没有指向用户模型的ForeignKey.我试图弄清楚如何使用email字段作为通用性在这两个表上执行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)
现在,您可以查询用户,并要求附加日志(例如,在视图中):
user = request.user
logs = user.logs
这种类型的过程在Ruby世界中很常见,但在Python中似乎不受欢迎.
(前几天我碰到了DuckPunching术语.它是基于Duck Typing的,在这里我们不在乎什么是什么课程:如果它像鸭子一样嘎嘎叫,就我们而言它就是鸭子.打孔时不会发出嘎嘎声,请继续打孔直到发出嘎嘎声.
内容总结
以上是互联网集市为您收集整理的python-在不相关的Django模型上执行SQL JOIN吗?全部内容,希望文章能够帮你解决python-在不相关的Django模型上执行SQL JOIN吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。