Как обновить модель с отношением иностранных ключей в Graphene- Django Relay? - PullRequest
1 голос
/ 04 февраля 2020

Я пытаюсь создать мутацию обновления модели, имеющей отношение внешнего ключа. Я сделал все в соответствии с документацией, но он по-прежнему не работает, когда я предоставляю входные данные сторонней модели.

Я создал входные данные с соответствующими атрибутами, которые я должен передать в запросе, но он не работает и выбрасывает показанную ниже ошибку. Поле 'id' ожидало число, но получило {'id': 2}.

Я не могу понять причину этой ошибки. Я передаю правильный ввод (я полагаю), может кто-нибудь, пожалуйста, помогите мне понять, почему это происходит?

Ваши предложения и отзывы очень ценятся.

Входные данные:

class FuelTypeInput(graphene.InputObjectType):
  # id of the FuelTypeModel
  id = graphene.Int()
  label = graphene.String()

class FuelSubtypeInput(graphene.InputObjectType):
  # Graphene ID
  id = graphene.ID()
  label = graphene.String()
  fuel_type = graphene.Field(FuelTypeInput)

Обновление мутации:

class UpdateFuelSubType(relay.ClientIDMutation):
  class Input:
    id = Int() # id of the Fuel SubTypeModel
    input = FuelSubtypeInput(required=True)

  ok = True
  fuel_subtype = Field(FuelSubTypeNode)

  def mutate_and_get_payload(root, info, id, input):

    ok = False

    if FuelSubType.objects.filter(pk=id).update(**input):
      fuel_subtype = FuelSubType.objects.get(pk=id)
      ok = True

      return UpdateFuelSubType(fuel_subtype=fuel_subtype)

    return UpdateFuelSubType(fuel_subtype=None)

Запрос мутации на клиенте:

mutation MyMutations {
    updateFuelSubtype(
        input: { 
            id: 2, 
            input: { label: "Updated 11 Mutation Label", 
                    fuelType: { id: 2 }
                }
                }
    ) {
        fuelSubtype {
            label
        }
    }
}

Окончательный результат:

{
  "errors": [
    {
      "message": "Field 'id' expected a number but got {'id': 2}.",
      "locations": [
        {
          "line": 48,
          "column": 5
        }
      ],
      "path": [
        "updateFuelSubtype"
      ]
    }
  ],
  "data": {
    "updateFuelSubtype": null
  }
}

Я бы тоже хотел бы отметить, что когда я удаляю ввод fuelType из запроса, все работает нормально, например:

mutation MyMutations {
    updateFuelSubtype(
        input: { 
            id: 2, 
            input: { label: "Updated 11 Mutation Label" }
                }
    ) {
        fuelSubtype {
            label
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...