Невозможно создать полиморфный экземпляр проекта в Django Rest Framework. Пример проекта JSON API. - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь понять, как полиморфные ресурсы работают в django-rest-framework-json-api, и я получаю следующую ошибку как в моем собственном проекте, так и в примере проекта, предоставленного django-rest-framework-json-api. Мои модели созданы с использованием django-polymorphic. Пример проекта, который я пытаюсь запустить: https://github.com/django-json-api/django-rest-framework-json-api/tree/master/example.

Конечная точка: localhost:8000/projects

{
"errors": [
{
"detail": "Incorrect relation type. Expected on of [artProject, researchProject], received None.",
"source": {
"pointer": "/data"
},
"status": "409"
}
]
}

Форма страницы проекта, используемая для создания нового экземпляра, не имеет поля, в котором я могу указать тип проекта. Показывает только поле темы. Поэтому мне также интересно, как я могу создать арт-проект, например.

В документации говорится, что тип определяется мета-данными resource_name в представлении, сериализаторе или модели. Но в возвращаемых данных json типа нет. Это потому, что serializer.instance = None используется для определения типа, когда force_type_resolution установлен на True. Он установлен на True, чтобы заставить полиморфные сериализаторы разрешать тип на основе экземпляра.

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

1 Ответ

0 голосов
/ 09 мая 2018

Сначала я пытался создать экземпляры в браузере, который выдал ошибку выше и не позволял мне выбирать дочерние типы. Я проверил это на Почтальоне и указал тип, и это сработало. У меня сложилось впечатление, что я могу даже создать экземпляр Project (сам родительский экземпляр, а не дочерний экземпляр), но, как ясно сказано в сообщении об ошибке, я не могу.

...