【发布时间】:2019-05-01 13:50:46
【问题描述】:
我在 Ember 后端使用 Django Rest Framwork JSON API。
我返回的(数据)响应包括“关系”键,但我需要为特定模型旁加载资源,因此希望包括 Ember 文档 https://guides.emberjs.com/release/models/relationships 中所示的“包含”键
我的 Product 模型与 Tax 模型具有 FK 关系。
这是我的税务序列化程序:
from rest_framework_json_api import serializers
from .models import Tax
class TaxSerializer(serializers.ModelSerializer):
class Meta:
model = Tax
fields = ('id', 'name', 'amount')
这是我的产品序列化器:
from rest_framework_json_api import serializers
from .models import Product
from tax.serializers import TaxSerializer
included_serializers = {
'tax': TaxSerializer
}
class Meta:
model = Product
fields = ('id', 'name', 'image', 'price','tax')
class JSONAPIMeta:
included_resources = ['tax']
为此,我遵循了 https://www.mattlayman.com/blog/2017/sideload-json-api-django/ 中的示例
但是,我的回复仍然包含“relationships”键,而不是“included”键,例如
"data" : [
{
"type":"products",
"id": "1",
"attributes": {...omitted for brevity ...
},
"relationships": {
"tax": {
"data": {
"type":"tax",
"id":"1"
}
}
}
},
{...etc....}
]
更新:
我现在将包含的密钥返回到响应中,这很棒。然而,这样做的全部意义在于,在我的 Ember 模型中,我不必创建明确的关系......来自 Ember 文档
当 API 返回一个深度嵌套的只读对象或数组时, 无需使用 DS.attr('hasMany') 或创建多个模型 DS.attr('belongsTo') 关系。这可能会导致潜在的 大量不必要的代码。您可以在 模板而不转换它们。这可以通过 DS.attr() (无属性类型)。
我在 Ember 的产品模型中完成了这项工作:
tax: DS.attr()
在我的模板中,假设我已经有一个产品实例,我希望能够访问 product.tax.amount - 但我不能。
【问题讨论】:
标签: django ember.js django-rest-framework ember-data