Django Графен Возвращение списка DjangoObjectTypes, в отличие от списка моделей, приводит к тому, что клиент отменяет предыдущие результаты. - PullRequest
0 голосов
/ 19 апреля 2020

Я делаю кросс-пост из этого репозитория: https://github.com/graphql-python/graphene-django/issues/938

У меня есть этот графеновый узел

class TripNode(DjangoObjectType):
    legs = List(LegNode)

    # Need explicit pk when forming TripNode manually and querying for id
    pk = String(source="id")

    class Meta:
        model = Trip
        interfaces = (relay.Node,)

Средство распознавания извлекает некоторые удаленные данные и разрешает legs там, поскольку legs также получено из этих удаленных данных.

def resolve_trips(root, info, **kwargs):
        response = requests.get("")

        return [
            TripNode(
                **{
                    "id": uuid.uuid4(),
                    "origin": trip["origin"],
                    "legs": [
                        TripLeg(
                            origin_hub=leg["flyFrom"],
                            id=uuid.uuid4(),
                        )
                        for leg in trip["route"]
                    ],
                }
            )
            for trip in response.json()["data"]
        ]

Обычно я бы вместо этого возвратил список Trip s, но я не могу использовать модель Django здесь потому что я разрешаю дополнительное поле legs, которое не существует в модели. Одна из причин этого заключается в том, что оно должно быть упорядочено, чтобы поле «один ко многим» было бы недостаточно без какого-либо добавления.

Если я верну список Trips без legs, это сработает хорошо, и клиент не перезаписывает результаты предыдущего запроса новыми. Но это странное поведение перезаписи происходит, когда я использую TripNode, и это единственное отличие. Я думаю, что это связано с тем, что в этом случае не соблюдается какой-то стандарт GraphQL.

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

...