@unkier
software developer

Как правильно сохранить/загрузить модели с зависимостями?

фронтэнд emberjs, бэкэнд django+django-rest-framework

есть форма заказа. юзер там выбирает значения из селектов, значение которых тянется из других таблиц.
на стороне сервера естественно заказ представлен в виде модели и связанные таблицы там models.ForeignKey, с этим всё понятно.
при чтении модели с сервера (list, retrieve) мне кажется логично отдавать модель сразу с включением зависимых данных(EMBEDDED RECORDS в терминах emberjs). с этим опять же проблем нет, drf умеет так отдавать.
{
"mainmodel":
{
"id": 1,
"simplefield": "string",
"complexfield" : {
 "id": 1,
 "name": "somename"
 }
}
}


а вот создавая новую запись включать значение зависимых данные вроде как не хорошо. и drf ругается что он из коробки так не умеет и нужно создавать кастомный create, и это будет считаться что ты хочешь создать основную модель и зависимую сразу. в общем при создании посылаются id на данные зависимых таблиц.
{
"mainmodel":
{
"simplefield": "string2",
"complexfield" :  2
}
}


неприятность в том что drf после успешного создания записи, возвращает этот же json емберу, а ембер как я понимаю ожидает модель с embedded records в ответ даже на запрос создания модели. и в итоге на сервере модель корректно создаётся, а ембер возвращает ошибку, потому что ему пришло то чего он не ждал.

правильный ли юскейс я вообще выбрал ? и как правильно работать с моделями с зависимостями в связке emberjs+django ?
  • Вопрос задан
  • 254 просмотра
Пригласить эксперта
Ответы на вопрос 1
Kaer_Morchen
@Kaer_Morchen
Разрабатываю web-приложения.
C django-rest-framework не работал, но мне видится несколько возможных решений.

Отдавайте модели так:
{
    "mainmodel": {
        "id": 1,
        "simplefield": "string",
        "complexfield": 2
    },
    "complexfield": {
       "id": 1,
        "name": "somename"
    }
}

В моделе Ember соответственно:
complexfield: DS.belongsTo('complexfield', {async: true})

Или попробуйте использовать какой-нибудь ember-django-adapter
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы