Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python JSON API与Django Rest-';包括';属性_Python_Django_Django Models_Django Rest Framework_Django Serializer - Fatal编程技术网

Python JSON API与Django Rest-';包括';属性

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

我正在使用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.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感兴趣。