2017-12-03 16 views
0

私のAPIから次の応答を返すことができます。Django Rest FrameworkのリレーションシップにJSON API形式のアトリビュートを追加する

{ "データ":{ "タイプ": "ユーザー"、 "ID": "2"、 は、 "属性":{ "メール": "[email protected]"、 "名前 ": "最初最後"、 }、 "関係":{ "ビジネス":{ "データ":{ "タイプ": "ビジネス"、 "ID": "1" " の属性":{ " name ":" the spot :, "address": "foo"、 } }} 、

私は、JSONのAPI仕様への応答をフォーマットするDjango Rest Framework JSON Apiを使用していると私は私が関係オブジェクト内の応答に追加された属性を取得するために何をする必要があるかと思いまして。ビジネスシリアライザが問題になっているように見えますが、代わりに、ビジネスの主キーだけを返す方法を示しているので、そのような形式のレスポンスを取得する方法についてはドキュメントでは分かりません。何か案は?

私のシリアライザは、次のようになります。)

1、関連するビジネス・シリアライザを割り当てます

それは、この問題に対処する適切な方法のように見えます
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}} 

答えて

0

は私のシリアライザに次の変更を行うことですフィールド:

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

関連する問題