首页 > 解决方案 > 如何在石墨烯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_userto_user在这种情况下,因为获取配置文件确实很昂贵

标签: djangographqlgraphene-django

解决方案


我的坏人应该先尝试我的想法

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")

解决了什么


推荐阅读