如何重新排序Django-Graphene子查询?

时间:2018-09-27 15:49:32

标签: django graphql django-oscar graphene-python

我正在尝试根据ProductLandingpageImage模型上的“订单”字段对ProductLandingPageImageNode重新排序。

如果这将是一个直接查询,我可以编写一个resolve方法,但是我无法找出在子查询中如何做到这一点。

主要查询:

Select * from table1, table2

PRODUCTNODE:

class Query(graphene.ObjectType):
  class Meta:
    interfaces = [relay.Node, ]

  product_oscar = graphene.List(ProductNode)
  productByID = DjangoFilterConnectionField(ProductNode)


  def resolve_product_oscar(self, info, **kwargs):
    return Product.objects.all()

PRODUCTLANDINGPAGEIMAGENODE:

class ProductNode(DjangoObjectType):
  class Meta:
    model = Product
    interfaces = (relay.Node, )
    filter_fields = {
      "slug" : ['iexact']
    }

如何解决这个问题?


根据要求提供LANDINGPAGEIMAGE模型:

class ProductLandingpageImageNode(DjangoObjectType):
  class Meta:
    model = ProductLandingpageImage
    interfaces = (relay.Node, )

Meta中的默认排序不起作用。当我用Graphql查询订单值时,不是不返回“ 1、2、3 ...”而是返回“ A_1,A_2 ...”

,这也很奇怪。

1 个答案:

答案 0 :(得分:1)

也许是这样的。由于您未列出您的产品型号,因此我只是在产品上填写了引用图片的字段名称,因此您应该重命名该字段。如果产品和图片之间存在多对一的关系,那么您可能想要一个不同的字段名称。

import graphene
from graphene.django.types import DjangoObjectType

class ProductNode(DjangoObjectType):
    name_of_your_image_field = graphene.Field(ProductLandingpageImageNode)

    class Meta:
        model = Product
        ... other Meta data


    def resolve_name_of_your_image_field(self, info):  # rename to match field
        # Put the code that returns a single ProductLandingpageImage instance here
        # graphene-django will convert your ProductLandingPageImage instance into a ProductLandingpageImageNode

这是为了返回单个ProductLandingPageIMage。如果要返回多个实例,则将字段定义更改为列表

    name_of_your_image_field = graphene.List(ProductLandingpageImageNode)

,然后在您的解析器中返回多个ProductLandingPageImage实例-例如,按所需方式排序的查询集。