我在Ember后端使用Django Rest Framwork JSON API。
我要返回的(数据)响应包括“关系”键,但是我需要为特定的模型加载资源,因此要包含Ember文档https://guides.emberjs.com/release/models/relationships中所示的“ included”键
我有一个产品模型,它与一个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/
中的示例但是,我的回答仍然包括“关系”键,而不包括“包含”键,例如
"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-但不能。
答案 0 :(得分:0)
用户序列化器深度= 1或2
class AccountSerializer(serializers.ModelSerializer):
class Meta:
model = Account
fields = ('id', 'account_name', 'users', 'created')
depth = 1