Как отправить список идентификаторов в качестве параметра с graphql - PullRequest
0 голосов
/ 20 марта 2019

Я использую React, Graphql и Apollo.

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

updateSlots(updateSlots, data){
        const {slotIds, refetch} = this.props;
        const {disabled, printEntry, toggleSlotForm} = data;

        updateSlots({variables: {disabled: disabled, printEntry: printEntry, ids: slotIds}})
            .then(res => {
                if (res.data.updateSlots.ok) {

                    refetch();
                    this.setState({hasError: false, errorMessage: "", saved: true, slot: initialSlot()}, () => {
                        setTimeout(() => toggleSlotForm(), 3000)
                    });
                }
            })
            .catch(err => {
                debugger;
                let error_msg = err.message.replace("GraphQL error: ", '');
                this.setState({hasError: true, saved: false, errorMessage: error_msg});
                throw(error_msg);
            })

    }

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

const UPDATE_SLOTS = gql`
  mutation updateSlots($disabled: Boolean!, $printEntry: Boolean!, $ids: String!) {
    updateSlots(disabled: $disabled, printEntry: $printEntry, ids: $ids) {
        ok
    }
  }
`;

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

class UpdateSlots(graphene.Mutation):
    class Arguments:
        disabled = graphene.Boolean(required=True)
        printEntry = graphene.Boolean(required=True)
        ids = graphene.String(required=True)

    ok = graphene.Boolean()

    @staticmethod
    def mutate(root, info, disabled, printEntry, ids):
        pdb.set_trace()
        ok = False

        try:
            ok = True
            for id in ids:
                print(id)
        except Exception as e:
            ok = False
            raise GraphQLError(str(e))

Но я получаю строку в ids variable следующим образом:

"['3692', '3695', '3704']"

вместо:

['3692', '3695', '3704']

Какможно отправить массив идентификаторов и как его получить на бэкэнде?

Есть идеи?

1 Ответ

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

Проблема в том, что ids имеет тип String.

В вашем schema тип аргумента ids равен String, поэтому для того, чтобы иметь возможность что-то иметькак ['3692', '3695', '3704'] вы должны будете определить аргумент в List из Strings.

Что-то вроде:

class UpdateSlots(graphene.Mutation):
    class Arguments:
        disabled = graphene.Boolean(required=True)
        printEntry = graphene.Boolean(required=True)
        ids = graphene.List(graphene.String(required=True))

И в мутации вам также придется обновитьпараметр ids в:

const UPDATE_SLOTS = gql`
  mutation updateSlots($disabled: Boolean!, $printEntry: Boolean!, $ids: [String]!) {
    updateSlots(disabled: $disabled, printEntry: $printEntry, ids: $ids) {
        ok
    }
  }
`;

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...