【问题标题】:Adding attributes to a relationship in Django Rest Framework w/ JSON API Format在带有 JSON API 格式的 Django Rest Framework 中向关系添加属性
【发布时间】:2018-05-17 07:23:35
【问题描述】:

我能够从我的 api 中返回以下响应,而不是粗体文本。

{ “数据”: { “类型”:“用户”, “id”:“2”, “属性”: { “电子邮件”:“test@test.com”, “名称”:“第一个最后一个”, }, “关系”:{ “企业”:{ “数据”: { “类型”:“业务”, “身份证”:“1” “属性”:{ “名称”:“地点:, “地址”:“foo”, } } },

我正在使用Django Rest Framework JSON Api 来格式化对 JSON Api 规范的响应,我想知道我需要做什么才能将属性添加到关系对象中的响应中。似乎业务序列化程序是问题,但是他们的文档对于如何获得这样格式的响应并不是很清楚,因为它显示了如何只获取业务的主键返回。有什么想法吗?

我的序列化器如下所示:

from rest_framework import serializers
from rest_framework_json_api import serializers as srs
from rest_framework_json_api.relations import ResourceRelatedField, SerializerMethodResourceRelatedField
from businesses.serializers import BusinessSerializer
from businesses.models import Business
from . import models

class UserSerializer(serializers.ModelSerializer):

    token = srs.SerializerMethodField()

    # necessary for M2M fields & reverse FK fields
    businesses = ResourceRelatedField(read_only=True, allow_null=True)

    review_user = ResourceRelatedField(read_only=True, allow_null=True, many=True)
    booking_user = ResourceRelatedField(read_only=True, allow_null=True, many=True)
    #businesses = serializers.PrimaryKeyRelatedField(queryset=Business.objects.all(), required=False)
    #businesses = BusinessSerializer(read_only=True)

    """Meta class tells Django what fields we want to take from the model"""
    class Meta:
        # links the serializer to the model class
        model = models.User
        # this is a tuple
        fields = ('id', 'email', 'password', 'name', 'phone', 'location', 'token', 'has_business', 'is_active', 'businesses')
        extra_kwargs = {'password': {'write_only': True}}

【问题讨论】:

    标签: python django-rest-framework json-api


    【解决方案1】:

    看起来处理此问题的正确方法是对我的序列化程序进行以下更改:

    1) 将业务序列化器分配给相关字段:

    businesses = BusinessSerializer(read_only=True)
    

    2) 这才是真正让我感到困惑的事情,因为我相信我在研究哪些不起作用时将这段代码嵌套在我的元类中。它应该嵌套在(在我的情况下) UserSerializer 但在元类之外:

    class JSONAPIMeta:
            included_resources = ['businesses']
    

    来源:https://github.com/django-json-api/django-rest-framework-json-api/issues/311

    【讨论】:

      猜你喜欢
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 2016-05-19
      • 2016-05-23
      • 1970-01-01
      • 2021-03-03
      • 2018-03-27
      相关资源
      最近更新 更多