0

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" }, 
   ] 
 }

誰かが私をここで助けてくれたら素晴らしいことです。ありがとう!

4

2 に答える 2