Как обновить ответы Saleor's Graphql с помощью недавно добавленных полей таблицы БД?

Во-первых, Saleor с GraphQL просто фантастический. Просто люби это.

Продукты, которые мы продаем, содержат дополнительные метаданные, которые нам необходимо получить от Graphql. По умолчанию запросы Graphql работают нормально, например:

{
  product (id: "UHJvZHVjdDo3Mg= = ") {
    id
    name
    description
  }
}

Что мне нужно сделать, так это предоставить данные из моей таблицы продуктов с дополнительными столбцами, такими как productInfo1, productInfo2 и productInfo3. Эта часть, конечно, легкая.

Тем не менее, я изо всех сил пытаюсь обновить Saleor Graphql, поэтому я могу выполнить запрос, подобный следующему:

{
  product (id: "UHJvZHVjdDo3Mg= = ") {
    id
    name
    description {
      productInfo1
      productInfo2
      productInfo3
    }
  }
}

Я просмотрел документы Saleor, Stack Overflow и множество блогов ... Я сам пробовал некоторые логические подходы, но безуспешно.

Я очень хочу начать работать над этими типами обновлений для наших нужд здесь. Будем очень признательны за любые предложения или ссылки на "как" места!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
1
0
559
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы хотите добавить подполя в описание, вам нужно сделать несколько вещей:

  1. Создайте новый тип объекта описания, который содержит нужные вам подполя, например:
class ProductDescription(graphene.ObjectType):
    productInfo1 = graphene.String()
    productInfo2 = graphene.String()
    productInfo3 = graphene.String()
  1. Установите поле description с новым типом под типом Product:
class Product(CountableDjangoObjectType):
    ...
    description = graphene.Field(ProductDescription)
  1. Добавьте преобразователь для description под Product тип:
def resolve_description(self, info):
    return ProductDescription(
        productInfo1=self.description,
        productInfo2='Some additional info',
        productInfo3='Some more additional info',
    )

API GraphQL от Saleor основан на фреймворке графен. Вы можете найти больше о преобразователях и типах объектов здесь: https://docs.graphene-python.org/en/latest/types/objecttypes/#resolvers.

Спасибо, Паффер. Я попробую это завтра утром.

Bob 23.05.2019 00:21

Эй, Паффер, это наверняка будет полезно, но я думаю, что не совсем ясно выразился. Я пытался добавить новый столбец в существующую таблицу, которая уже доступна через Saleor GraphQL. Кроме того, что еще более важно, я столкнулся с необходимостью создать новую таблицу БД и открыть ее через Graphql. Не могли бы вы дать мне несколько рекомендаций/примеров по этому поводу? Я искал пару дней без четкого ответа. Огромное спасибо!

Bob 23.05.2019 15:23

Привет, Боб, не мог бы ты рассказать подробнее? Я не совсем понимаю, чего вы пытаетесь добиться. Вы написали в своем вопросе, что можете добавлять новые столбцы и отображать их в разделе «Продукт» в GraphQL API, верно? Я думал, вы просто хотите сделать поле вложенным.

paffer 23.05.2019 17:17

Если вы хотите, чтобы поле description в модели Product было полем ForeignKey для вашей новой модели ProductDescription (т. е. новой отдельной таблицы), вам нужно будет создать для него правильный тип GraphQL. Вы можете сделать это, создав класс в graphql/product/types/products.py, который наследуется от DjangoObjectType и имеет model = ProductDescription в своем Meta. Посмотрите пример в docs.graphene-python.org/projects/django/en/latest/queries/…‌​. Если вы сделаете это, API автоматически подберет этот новый тип, и вы сможете запросить его.

paffer 23.05.2019 17:18

Спасибо, Паффер. Я посмотрю на это сегодня днем.

Bob 23.05.2019 17:36

Привет, Паффер, Эти документы по графеновому питону приятны и легко читаются. Спасибо. Я пытаюсь сопоставить различия между ними и тем, как Saleor настроил файлы Graphql. Надеюсь скоро разобраться. Спасибо

Bob 24.05.2019 18:49

Другие вопросы по теме