Django Rest Framework JSONAPI和侧载/包含的资源

时间:2019-05-01 13:50:46

标签: django ember.js django-rest-framework ember-data

我在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-但不能。

1 个答案:

答案 0 :(得分:0)

用户序列化器深度= 1或2

class AccountSerializer(serializers.ModelSerializer):
class Meta:
    model = Account
    fields = ('id', 'account_name', 'users', 'created')
    depth = 1