Графен- Django - как передать аргумент из запроса в класс DjangoObjectType - PullRequest
2 голосов
/ 15 апреля 2020

Прежде всего, спасибо! Прошло 1 год без вопросов, так как я всегда находил ответ. Вы огромная помощь.

Сегодня у меня есть вопрос, который я не могу решить самостоятельно. Пожалуйста, я надеюсь, что вы будете любезны помочь мне в этом вопросе.

Контекст: Я работаю над проектом с Django framework и у меня есть несколько динамических c страниц сделано с реакции. js. API, который я использую между ними, основан на graphQL. Аполлон для клиента, графен - django для серверной части.

Я хочу создать динамические c страницы, сделанные из запроса GraphQL, имеющего набор (объявленное поле в классе DjangoObjectType, сделанное из Django query), и я хочу иметь возможность динамически фильтровать родительский элемент с аргументом A и набор с аргументом B. Моя проблема заключается в том, как найти способ передать аргумент B в набор для его фильтрации.

GraphQL, которого я достиг бы на основе документации по GraphQL

query DistributionHisto
(
  $id:ID,
  $limit:Int
)
{
  distributionHisto(id:$id)
  {
    id,
    historical(limit:$limit)
    {
       id,
       date,
       histo
    }
  }
}

Но я не понимаю, как передать (limit: $ limit) моему набору в серверной части.

Вот мой schema.py

import graphene
from graphene_django.types import DjangoObjectType

class DistributionType(DjangoObjectType):
    class Meta:
        model = DistributionTuple

    historical = graphene.List(HistoricalTimeSeriesType)

    def resolve_historical(self, info):
        return HistoricalTimeSeries.objects.filter(
            distribution_tuple_id=self.id
            ).order_by('date')[:2]

class Query(object):
    distribution_histo = graphene.List(
        graphene.NonNull(DistributionType),
        id=graphene.ID(),
        limit=graphene.Int()
        )

    def resolve_distribution_histo(
            self, info, id=None, limit=None):
        filter_q1 = {'id': id} if id else {}
        return DistributionTuple.objects.filter(**filter_q1)

Я пробовал несколько вещей, но я не нашел способа заставить его работать до сих пор.

На данный момент, как вы видите, аргумент "limit" заходит в тупик в def resol *, где в идеале он будет передан классу DistributionSetHistoType, где он заменит срез [: 2] на [: limit] в resol_distribution_slice_set ()

Я надеюсь, что все ясно, пожалуйста, дайте мне знать если это не так.

Спасибо за вашу поддержку.

...