Как правильно получить результаты с Graphql - PullRequest
0 голосов
/ 14 октября 2019

Я использую графен в Django в качестве бэкэнда.

У меня есть запрос следующим образом:

class Query(object):
    constructor_info = graphene.Field(UnTypedDataType, vin=graphene.String(required=True))
    def resolve_constructor_info(self, info, **kwargs):
        vin = kwargs.get('vin')
        locale = info.context.LANGUAGE_CODE
        constructor_info = get_kp_dict(vin, locale)

        options = []
        for option in constructor_info["vehicle"]["vehicleEquipment"]:
            options.append(
                {
                    'code': option['codeEquipment'],
                    'description': option['equipmentDescription']
                }
            )
        vehicle = {
            'model_year': constructor_info["vehicle"]['voExterior']['modelYear'],
            'short_description': constructor_info["vehicle"]['voExterior']['shortModelTypeDescription'],
            'long_description': "",
            'exterior': "",
            'interior': constructor_info["vehicle"]['voExterior']['descriptionUpholstery'],
            'places': constructor_info["vehicle"]['voExterior']['numberOfPlaces'],
            'doors': constructor_info["vehicle"]['voExterior']['numberOfDoors'],
            'catalog_price': constructor_info["vehicle"]['voExterior']['priceCatalogueWithoutOptions'],
            'catalog_price_with_options': constructor_info["vehicle"]['voExterior']['priceCatalogue'],
            'first_registartion': constructor_info["vehicle"]['entryDate'],
            'vin': constructor_info["vehicle"]['chassisNumber'],
            'commission': constructor_info["vehicle"]['commissionNumber'],
            'power_kw': constructor_info["vehicle"]['powerKW'],
            'model_code': constructor_info["vehicle"]['modelCode'],
            'options': options
        }

        return UnTypedDataType(data=vehicle)

И UnTypedDataType выглядит следующим образом:

class UnTypedDataType(graphene.ObjectType):
    data = graphene.Field(UnTypedObject)

На интерфейсе я получаю результат в виде:

const GET_CONSTRUCTOR_INFO = gql`
  query getConstructorInfo($vin: String!) {
    constructorInfo(vin: $vin) {
      data
    }
  }
`;

И в data я получаю объект транспортного средства.

Но есть ли способ удалить данные ичтобы получить результат следующим образом:

const GET_CONSTRUCTOR_INFO = gql`
      query getConstructorInfo($vin: String!) {
        constructorInfo(vin: $vin) {
          model_year
          short_description
          long_description
          ... THE REST ...
        }
      }
    `;

1 Ответ

0 голосов
/ 15 октября 2019

В случае, если это кому-то еще нужно, я решил проблему следующим образом.

Я изменил constructor_info в запросе на:

constructor_info = graphene.Field(ConstructorInfoType, vin=graphene.String(required=True))

И добавил ConstructorInfoType класс:

class ConstructorInfoType(graphene.ObjectType):
    model_year = graphene.String()
    short_description = graphene.String()
    long_description = graphene.String()
    ...THE REST...

    class Meta:
        default_resolver = dict_resolver

А потом на стороне React я мог бы использовать его следующим образом:

const GET_CONSTRUCTOR_INFO = gql`
  query getConstructorInfo($vin: String!) {
    constructorInfo(vin: $vin) {
      modelYear
      shortDescription
      ...THE REST...
    }
  }
`;

Надеюсь, это кому-нибудь поможет.

...