Django-rest フレームワークを使用してJSON-APIを作成しています。「included」属性を除いて、JSON-API ドキュメントで指定されているのと同じ方法で、返された JSON オブジェクトを構造化できます。関連モデルの複数のシリアル化されたオブジェクトを含める方法はありますか?
例えば
2 つのモデル クラスがある場合
# Snippet Model
from django.db import models
class Snippet(models.Model):
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100, blank=True, default='')
user = models.ForeignKey('auth.User', related_name='snippets')
# Comment Model
from django.db import models
class Comment(models.Model):
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100, blank=True, default='')
user = models.ForeignKey('auth.User', related_name='comments')
これらの 2 つのモデルのシリアライザーがあります。
from rest_framework import serializers
class SnippetSerializer(serializers.ModelSerializer):
model = Snippet
fields = ('id','created', 'title')
from rest_framework import serializers
class CommentSerializer(serializers.ModelSerializer):
model = Comment
fields = ('id','created', 'title')
そして私はユーザーシリアライザーを持っています
# User serializer
from .serializers import SnippetSerializer
from .serializers import CommentSerializer
class UserSerializer(serializers.ModelSerializer):
included = serializers.SerilizerMethodField()
class Meta:
model = User
fields = ('id','included')
def get_included(self, obj):
included_objs = []
request = self.context['request']
# check if requested url has a query parameter "included"
query = request.QUERY_PARAMS['included'] if 'included' in request.QUERY_PARAMS else None
if query:
queries = query.split(',')
if 'included' in queries:
snippets = SnippetSerializer(many=True, read_only=True).data
comments = CommentSerializer(many=True, read_only=True).data
included_objs.append(snippets)
included_objs.append(comments)
return included_objs
これらのコードは、必要なものを提供しませんでした。
目的は、要求された URL に "included" クエリが含まれている場合、API は "included" 属性のユーザー オブジェクトに関連する CommentSerialized および SnippetSerialized オブジェクトを含む JSON オブジェクトを返すことです。結果は次のようになります。
{
"id" : 1,
"included": [
{'id': 2,'created': "20150729", "title":'snippet' },
{'id': 2,'created': "20150730", "title":"comment" },
{'id': 3,'created': "20150731", "title":"comment" },
]
}
誰かが私をここで助けてくれたら素晴らしいことです。ありがとう!