如何使用serialiser和listViewAPI向django rest api中的queryset添加额外属性?

如何使用serialiser和listViewAPI向django rest api中的queryset添加额外属性?,django,django-models,django-rest-framework,serialization,Django,Django Models,Django Rest Framework,Serialization,如何向django rest api中的queryset添加其他字段,如count、status_代码 class SongList(generics.ListAPIView): """ API endpoint that allows users to be viewed or edited===1111. """ serializer_class = SongSerialier def get_queryset(self): queryset = Song.objects.all()

如何向django rest api中的queryset添加其他字段,如count、status_代码

class SongList(generics.ListAPIView):
"""
API endpoint that allows users to be viewed or edited===1111.
"""
serializer_class = SongSerialier
def get_queryset(self):
    queryset = Song.objects.all()
    id = self.request.query_params.get('id', None)
    test=QuerySet()

    return queryset
例如,上面的代码仅以列表的形式返回
SongSerialier
中的内容

[
    {
        "song_title": "song1",
        "file_type": "mp3",
        "album": 1,
        "test": "1",
        "my_field": false
    },
    {
        "song_title": "song1",
        "file_type": "mp3",
        "album": 2,
        "test": "1",
        "my_field": false
    }
]
我希望我的输出如下格式

{
status_code:200,
count:2,
total_count:4,
data:[
    {
        "song_title": "song1",
        "file_type": "mp3",
        "album": 1,
        "test": "1",
        "my_field": false
    },
    {
        "song_title": "song1",
        "file_type": "mp3",
        "album": 2,
        "test": "1",
        "my_field": false
    }
]
}
下面是我的序列化程序代码

下面是我的序列化程序代码

找到解决办法了吗 *您需要覆盖ListAPIView*中的list方法

这将给出如下结果:

找到解决办法了吗 *您需要覆盖ListAPIView*中的list方法

这将给出如下结果:


请添加序列化程序代码。您可以在序列化程序中轻松添加附加字段。restframework自动添加状态代码,如果需要计数,则使用分页,然后获取计数。total_count是指当您使用filter queryset或仅使用songs表中的所有记录时的total_count?请添加序列化程序代码。您可以在序列化程序中轻松添加附加字段。restframework自动添加状态代码,如果需要计数,则使用分页,然后获取计数。total_count是指当您使用filter queryset或仅使用songs表中的所有记录时的total_count?这里我已通过发送静态收集字典完全更改为输出响应这里我已通过发送静态收集字典完全更改为输出响应
class SongSerializer(serializers.ModelSerializer):   
    test=serializers.SerializerMethodField()
    my_field = serializers.SerializerMethodField('is_named_bar')

    def is_named_bar(self, foo):
        return foo.id == "bar"
    def get_test(self, obj):
        print ("OBJ, ",obj,type(obj),obj.id)
        return "1"
    class Meta:
        model=Song
        fields=('song_title','file_type','album','test','my_field')
class SongList(generics.ListAPIView):
i=0
"""
API endpoint that allows users to be viewed or edited===1111.


"""
serializer_class = SongSerialier


def list(self, request, *args, **kwargs):
    response = super(SongList, self).list(request, args, kwargs)
    # Add data to response.data Example for your object:
    print("Data    ::: ",type(response),response,response.data)#,dict(response.data))
    print ("datat  type: ",type(response.data))
    d1 = collections.OrderedDict()
    d1['a'] = 'A'
    d1['b'] = 'B'
    d1['c'] = 'C'
    d1['d'] = 'D'
    d1['e'] = 'E'
    response.data=d1
    self.no+=1
    print ("no:2  ",self.no)
    # response.data["a_status_code"]=200
    # response.data["a_status_text"] = "Success"
    #response['10_mi_count'] = 10
    # a=response.render().content
    # print ("a: ",a)
    return response
def get_queryset(self):
    self.no=1
    print ("no:1 ",self.no)
    queryset = Song.objects.all().annotate(count_test=Count('id'))
    id = self.request.query_params.get('id', None)
    test=QuerySet()
    #print( "=========111" ,type(queryset),self.serializer_class.data)
    # print ("j1: ",j)
    # j+=1
    return queryset