Python JSON API与Django Rest-';包括';属性
我正在使用Django rest框架创建。我可以按照JSON-API文档指定的方式构造返回的JSON对象,除了“included”属性。有没有办法包含相关模型的多个序列化对象 比如说 如果我有两个模型课Python JSON API与Django Rest-';包括';属性,python,django,django-models,django-rest-framework,django-serializer,Python,Django,Django Models,Django Rest Framework,Django Serializer,我正在使用Django rest框架创建。我可以按照JSON-API文档指定的方式构造返回的JSON对象,除了“included”属性。有没有办法包含相关模型的多个序列化对象 比如说 如果我有两个模型课 # Snippet Model from django.db import models class Snippet(models.Model): created = models.DateTimeField(auto_now_add=True) title = models.C
# 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')
我有这两个模型的序列化程序:
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将返回一个JSON对象,其中包含与“included”属性下的用户对象相关的CommentSerialized和SnippetSerialized对象。结果应该是这样的
{
"id" : 1,
"included": [
{'id': 2,'created': "20150729", "title":'snippet' },
{'id': 2,'created': "20150730", "title":"comment" },
{'id': 3,'created': "20150731", "title":"comment" },
]
}
如果有人能在这里帮助我,那就太好了。谢谢 为此,我将编写第二个序列化程序:
class IncludedUserSerializer(serializers.ModelSerializer):
snippets = SnippetSerializer(source = 'snippet_set', many=True)
comments = CommentSerializer(source = 'comment_set', many=True)
class Meta:
model=User
fields = ('id','snippets', 'comments')
然后在您的视图中重写get_序列化程序方法
def get_serializer(self):
if self.query_params.get('included', None):
return IncludedUserSerializer
else:
return UserSerializer
为此,我将编写第二个序列化程序:
class IncludedUserSerializer(serializers.ModelSerializer):
snippets = SnippetSerializer(source = 'snippet_set', many=True)
comments = CommentSerializer(source = 'comment_set', many=True)
class Meta:
model=User
fields = ('id','snippets', 'comments')
然后在您的视图中重写get_序列化程序方法
def get_serializer(self):
if self.query_params.get('included', None):
return IncludedUserSerializer
else:
return UserSerializer
为此,我将编写第二个序列化程序:
class IncludedUserSerializer(serializers.ModelSerializer):
snippets = SnippetSerializer(source = 'snippet_set', many=True)
comments = CommentSerializer(source = 'comment_set', many=True)
class Meta:
model=User
fields = ('id','snippets', 'comments')
然后在您的视图中重写get_序列化程序方法
def get_serializer(self):
if self.query_params.get('included', None):
return IncludedUserSerializer
else:
return UserSerializer
为此,我将编写第二个序列化程序:
class IncludedUserSerializer(serializers.ModelSerializer):
snippets = SnippetSerializer(source = 'snippet_set', many=True)
comments = CommentSerializer(source = 'comment_set', many=True)
class Meta:
model=User
fields = ('id','snippets', 'comments')
然后在您的视图中重写get_序列化程序方法
def get_serializer(self):
if self.query_params.get('included', None):
return IncludedUserSerializer
else:
return UserSerializer
该项目最近实现了对该行为的支持
它是这样使用的:
class UserSerializer(serializers.Serializer):
name = serializers.CharField(max_length=200)
# PostSerializer NOT included directly on the serializer, ResourceRelatedField is
# specified as default
posts = relations.ResourceRelatedField(
source='post_set', many=True, read_only=True)
# specifies serializer to use when passing in the `include` param
included_serializers = {
'posts': PostSerializer,
}
如果我理解的很好,您已经自己实现了JSON-API规范的一部分,所以我不知道切换东西并使用他们的项目是否可行。但是看看他们是如何实现你想要的可能会有所帮助。
例如,请参阅和。项目最近实施了对该行为的支持
它是这样使用的:
class UserSerializer(serializers.Serializer):
name = serializers.CharField(max_length=200)
# PostSerializer NOT included directly on the serializer, ResourceRelatedField is
# specified as default
posts = relations.ResourceRelatedField(
source='post_set', many=True, read_only=True)
# specifies serializer to use when passing in the `include` param
included_serializers = {
'posts': PostSerializer,
}
如果我理解的很好,您已经自己实现了JSON-API规范的一部分,所以我不知道切换东西并使用他们的项目是否可行。但是看看他们是如何实现你想要的可能会有所帮助。
例如,请参阅和。项目最近实施了对该行为的支持
它是这样使用的:
class UserSerializer(serializers.Serializer):
name = serializers.CharField(max_length=200)
# PostSerializer NOT included directly on the serializer, ResourceRelatedField is
# specified as default
posts = relations.ResourceRelatedField(
source='post_set', many=True, read_only=True)
# specifies serializer to use when passing in the `include` param
included_serializers = {
'posts': PostSerializer,
}
如果我理解的很好,您已经自己实现了JSON-API规范的一部分,所以我不知道切换东西并使用他们的项目是否可行。但是看看他们是如何实现你想要的可能会有所帮助。
例如,请参阅和。项目最近实施了对该行为的支持
它是这样使用的:
class UserSerializer(serializers.Serializer):
name = serializers.CharField(max_length=200)
# PostSerializer NOT included directly on the serializer, ResourceRelatedField is
# specified as default
posts = relations.ResourceRelatedField(
source='post_set', many=True, read_only=True)
# specifies serializer to use when passing in the `include` param
included_serializers = {
'posts': PostSerializer,
}
如果我理解的很好,您已经自己实现了JSON-API规范的一部分,所以我不知道切换东西并使用他们的项目是否可行。但是看看他们是如何实现你想要的可能会有所帮助。
例如,请参见和。但这不会在“包含”属性下显示片段和注释的序列化对象。但这不会在“包含”属性下显示片段和注释的序列化对象。但这不会在“包含”属性下显示片段和注释的序列化对象但这不会在“included”属性下显示代码段和注释的序列化对象。您需要在SnippetSerializer和CommentSerializer对象中包含查询集。但是,您可能仍然希望分离出单独的模型。我不妨提及您可能感兴趣的WIP。您需要在SnippetSerializer和CommentSerializer对象中包含queryset。但是,您可能仍然希望分离出单独的模型。我不妨提及您可能感兴趣的WIP。您需要在SnippetSerializer和CommentSerializer对象中包含queryset。但是,您可能仍然希望分离出单独的模型。我不妨提及您可能感兴趣的WIP。您需要在SnippetSerializer和CommentSerializer对象中包含queryset。然而,你可能仍然想分离出单独的模型。我不妨提一下,你可能会对一个WIP感兴趣。