【问题标题】:Django Rest Framework JSONAPI and sideloaded/included resourcesDjango Rest Framework JSONAPI 和旁加载/包含的资源
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 您好,感谢您的评论 - 抱歉对我的结果没有任何影响
    猜你喜欢
    • 2016-12-18
    • 2014-12-15
    • 2017-10-19
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    相关资源
    最近更新 更多