Невозможно получить последние n элементов из GraphQL с помощью graphene_django - PullRequest
0 голосов
/ 21 февраля 2019

Я пытался реализовать GraphQL в существующей Django REST Framework.Я использовал graphene-django == 2.2.0

Он был успешно реализован.Но нельзя использовать ключевое слово 'last' в запросе запроса.Я добавляю код схемы.

import graphene
from graphene_django.types import DjangoObjectType
from flowers.models import Flower


class FlowerType(DjangoObjectType):
    class Meta:
        model = Flower


class Query(graphene.ObjectType):
    flowers = graphene.List(FlowerType)

    def resolve_flowers(self, info, **kwargs):
        return Flower.objects.all()

Запрос

{
    flowers (last: 2){
        id
    }
}

Результат

{
  "errors": [
    {
      "locations": [
        {
          "column": 12,
          "line": 2
        }
      ],
      "message": "Unknown argument \"last\" on field \"flowers\" of type \"Query\"."
    }
  ]
}

Нужно ли изменять код в проекте Django?Как это решить?

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Или просто используйте реле, он уже предоставляет этот фильтр, среди других.

class FlowerType(DjangoObjectType):
    class Meta:
        model = Flower
        interfaces = (graphene.relay.Node,)

class FlowerConnection(graphene.relay.Connection):
    class Meta:
        node = FlowerType

class Query(graphene.ObjectType):
    flowers = graphene.relay.ConnectionField(FlowerConnection)

    def resolve_flowers(self, info, **kwargs):
        return Flower.objects.all()
0 голосов
/ 21 февраля 2019

В вашей схеме GraphQL.Вы должны быть конкретны в запросе, который принимает последний аргумент и возвращает запрос.Пожалуйста, укажите тип возвращаемого цветка (в вашем случае)

class Query(graphene.ObjectType):
  flowers = graphene.List(FlowerType, last=graphene.Int())

  def resolve_flowers(self, args, context, info):
    query = FlowerType.get_query(context)
    return query.get(args.get('last'))

Or

query($last: Int!): ReturnType

И вы можете изменить свой запрос на этот

query($flowerId: 2) {
    flowers (last: $flowerId){
        id
    }
}
...