灰烬序列化定制替代u

2024-06-14 10:55:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我是余烬的新手。这就是我面对的。我用python/Django编写了后端RESTAPI。它在/api/works/上提供以下json响应

[
{
    "id": 17,
    "title": "about us",
    "description": "some project",
    "owner": "admin"
},
{
    "id": 19,
    "title": "test1 profit project",
    "description": "dev null",
    "owner": "test1"
}
]

同样在细节视图上,例如:/api/works/17/

{
"id": 17,
"title": "about us",
"description": "some project",
"owner": "admin"
}

还有/api/works/17/tasks/用于列出工作任务

[
{
    "id": 2,
    "title": "secondWorkTask",
    "description": "task2 description",
    "due_date": "2016-09-26",
    "assign": 1,
    "project": "about us"
},
{
    "id": 3,
    "title": "some task name",
    "description": "some task description",
    "due_date": "2016-08-27",
    "assign": 2,
    "project": "about us"
}
]

在前端,我使用的是ember cli version2.7.0+ember-django-adapter。我可以毫无问题地获得/api/works。你知道吗

ember上的序列化程序要获取项目:

export default DRFSerializer.extend({
  normalizeFindAllResponse(store, primaryModelClass, payload, id, requestType) {
   payload.data = payload;
   return this._super(...arguments);
 }
});

我想实现的是在余烬端加载余烬端的工作细节url(emberexample-app.com/app/17/)时,它必须显示所有任务。目前我可以通过上面的序列化程序通过这个url /api/works/17/获得工作细节。但是我怎样才能得到任务呢?请帮我想办法解决这个问题。你知道吗


Tags: projectapiidadmintitlesomedescription细节
1条回答
网友
1楼 · 发布于 2024-06-14 10:55:40

序列化程序用于自定义数据的加载和保存(或序列化和反序列化)。你知道吗

要自定义URL,必须使用适配器(例如RESTAdapter是我最常用的适配器)。你知道吗

如果您想创建(urlForCreateRecord)或更新(urlForUpdateRecord)任务,这将起作用,但如果您只想将belongsTo关系之后的work.get('tasks')转换为GET http://endpoint/work/<work_id>/tasks,这可能无法直接起作用,至少在我的情况下,它“不起作用”

我发现一个非常有效的解决方案是将属性links作为普通对象添加到父对象中,该父对象包含指向要作为属性检索的不同子模型的链接。你知道吗

像这样: 你知道吗

/* app/adapters/work.js */
import DS from 'ember';

export default DS.RESTSerializer({
    normalize (model, hash, prop) {
        hash.links = hash.links || {};
        hash.links.tasks = this.buildURL(model, hash.id) + '/tasks';
        return this._super(model, hash, prop);
    }
});

在本例中,当Ember尝试从工作模型获取tasks属性时,它将获取work.links.tasks包含的URL。你知道吗

相关问题 更多 >