我正在使用Django Rest Framework,并且有此序列化程序。
class UserSerializer(serializers.Serializer):
name = serializers.CharField()
email = serializers.CharField()
phone = serializers.CharField()
产生类似这样的东西:
[
{"name": "NAME", "email": "EMAIL", "phone": "PHONE"},
{"name": "NAME", "email": "EMAIL", "phone": "PHONE"},
{"name": "NAME", "email": "EMAIL", "phone": "PHONE"},
]
但是我希望响应看起来像这样:
{
"new_user": ID_NEW_USER,
"data": [
{"name": "NAME", "email": "EMAIL", "phone": "PHONE"},
{"name": "NAME", "email": "EMAIL", "phone": "PHONE"},
{"name": "NAME", "email": "EMAIL", "phone": "PHONE"},
]
}
所以我正在这样做。但是看来我应该使用另一个序列化器。
class UserListView(CustomClassMixin):
def get(self, request):
users = Users.objects.all()
new_user = QUERY_TO_GET_NEW_USER
serializer = UserSerializer(users, many=True)
return Response({"new_user": new_user, "data": serializer.data})
我尝试使用to_representation方法,但似乎这可能是一种更简单的方法。
有人知道最好的方法吗?
答案 0 :(得分:0)
类似的东西吗?
class MySerializer(serializers.Serializer):
new_user = serializers.IntegerField()
data = serializers.ListSerializer(child=UserSerializer) # eventually UserSerializer(many=True)
但这并没有太大变化,因为序列化器的初始化与您当前的响应几乎相同。
但是,您可以看一下分页类-因为我认为这是您缺少的部分。
因此,在rest_framework.pagination
中,您可以找到不同类型的分页,让我们专注于:PageNumberPagination,那里有一种方法:
def get_paginated_response(self, data):
return Response(OrderedDict([
('count', self.count),
('next', self.get_next_link()),
('previous', self.get_previous_link()),
('results', data)
]))
现在,您可以简单地对其进行修改以满足您的需求;因此将results
更改为data
并为new_user
添加其他字段。
也-想知道为什么不使用ModelViewSets。无论如何-如果您有任何问题-请询问。编码愉快。