django - 如何在石墨烯django中预取直接不相关的字段
问题描述
我开始使用石墨烯,有些事情我还不太了解,例如,当使用节点时,我有这个查询
{
orders {
edges {
node {
id
fromUser {
id
username
userprofile{
image
id
}
}
toUser {
id
username
userprofile{
image
id
}
}
}
}
}
}
这非常好,因为它允许我获取配置文件并获取与用户相关的给定配置文件的图像,即使用户是配置文件中的外键,但是就必须完成的查询而言,它是昂贵的以获得每个用户的个人资料
我的模型看起来像这样
class Order(models.Model):
from_user = models.ForeignKey(User, on_delete=models.PROTECT, related_name="from_user")
to_user = models.ForeignKey(User, on_delete=models.PROTECT, related_name="to_user")
....
class UserProfile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
image = models.ImageField(null=True)
和我现在的查询
orders = Order.objects.select_related('from_user','to_user').filter(
Q(from_user=user) |
Q(to_user=user)
).order_by("-id")
return orders
如果有人可以帮助我知道如何为两者预取配置文件,将不胜感激from_user
,to_user
在这种情况下,因为获取配置文件确实很昂贵
解决方案
我的坏人应该先尝试我的想法
orders = PaymentOrder.objects.select_related('from_user','to_user',"from_user__userprofile","to_user__userprofile").filter(
Q(from_user=user) |
Q(to_user=user)
).order_by("-id")
解决了什么
推荐阅读
- java - Vaadin 14 - 找不到 BeanManager 类
- ember.js - 一次调用背后的 Ember 网络调用负载
- python - 没有名为 pyVim 的模块
- javascript - discord.js 向特定频道发送消息
- javascript - 如何避免创建额外的 li 元素
- scala - Scala协方差推断类型List [Any]?
- c# - 如何提出发帖请求?
- python - Python将文件中的项目读入字典
- git - git lfs:什么是“可验证”文件?
- python - ImportError: DLL load failed: 找不到指定的模块即使该模块已经安装