gpt4 book ai didi

django - 如何在 Json 中返回带有额外字段的对象列表(Django Rest Framework)

转载 作者:行者123 更新时间:2023-12-05 06:42:53 25 4
gpt4 key购买 nike

我正在使用 ModelViewSet 通过 get_queryset 生成项目列表。我想返回一个包含对象列表和一个额外字段(DurationField 的总时间)的 json。示例:

{  
"total_time":"00:10:00",
"objects":[
{
"pk":1,
"title":"Title",
"duration": "00:05:00"
},
{
"pk":1,
"title":"Title",
"duration": "00:05:00"
}
]
}

我该怎么做?下面是我的代码。

模型 View 集:

class ModelViewSet(viewsets.ModelViewSet):
queryset = Model.objects.all()
serializer_class = ModelSerializer
permission_classes = (IsAuthenticated,)

def get_queryset(self):
user = self.request.user
list = Model.objects.filter(user=user)
total_time = .. ## sum the duration of list of objects

## I want to return the list and total_time
return list

序列化程序.py:

class ModelSerializer(serializers.ModelSerializer):
pk = serializers.IntegerField(read_only=True)
user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all(), required=False, allow_null=True)
project = serializers.PrimaryKeyRelatedField(queryset=Project.objects.all(), required=False, allow_null=True)
class Meta:
model = Model

fields = ('pk', 'title', 'user', 'project', 'duration')

网址:

router = DefaultRouter()
router.register(r'^', views.ModelViewSet)
urlpatterns = [
url(r'^api', include(router.urls)),
]

最佳答案

一种方法是子类化分页器(默认分页类是 PageNumberPagination)并调整 get_paginated_response。这完全未经测试,但可能是这样的:

from rest_framework.pagination import PageNumberPagination

class CustomPageNumberPagination(PageNumberPagination):

def get_paginated_response(self, data, total_time):
return Response(OrderedDict([
('count', self.page.paginator.count),
('next', self.get_next_link()),
('previous', self.get_previous_link()),
('total_time', total_time),
('results', data)
]))


class ModelViewSet(viewsets.ModelViewSet):
queryset = Model.objects.all()
serializer_class = ModelSerializer
permission_classes = (IsAuthenticated,)
pagination_class = CustomPageNumberPagination

def get_queryset(self):
user = self.request.user
list = Model.objects.filter(user=user)

self.total_time = .. ## sum the duration of list of objects

return list

def get_paginated_response(self, data):
return self.paginator.get_paginated_response(data, self.total_time)

无论如何,希望这能有所帮助。

祝你好运!

关于django - 如何在 Json 中返回带有额外字段的对象列表(Django Rest Framework),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35677157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com