Django Rest Framework 使用自定义键将模型序列化为对象
Django Rest Framework Serialize Model into Object with Custom Key
我正在使用 Django 和 djangorestframework。我知道将模型序列化为对象列表,但我目前想将它们序列化为具有自定义键的对象。对于这个实例,我想将用户模型序列化为对象的对象,其访问键是用户的用户名。
serializers.py:
from rest_framework import serializers
from django.contrib.auth.models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'username']
views.py:
from django.contrib.auth.models import User
from rest_framework import viewsets
from .serializers import UserSerializer
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
当前输出:
[
{
"id": 1,
"username": "username_a"
},
{
"id": 2,
"username": "username_b"
}
]
期望的输出:
{
"username_a": {
"id": 1
},
"username_b": {
"id": 2
}
}
替代的期望输出:
{
"username_a": {
"id": 1,
"username": "username_a"
},
"username_b": {
"id": 2
"username": "username_b"
}
}
这将有助于获得“替代的所需输出”:
from django.contrib.auth.models import User
from rest_framework import viewsets
from .serializers import UserSerializer
from rest_framework.response import Response
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
def list(self, request):
queryset = User.objects.all()
serializer = UserSerializer(queryset, many=True)
list_of_objects = serializer.data
object_of_objects = {}
custom_key = "username"
for current_object in list_of_objects:
object_of_objects[current_object[custom_key]] = current_object
return Response(object_of_objects)
我正在使用 Django 和 djangorestframework。我知道将模型序列化为对象列表,但我目前想将它们序列化为具有自定义键的对象。对于这个实例,我想将用户模型序列化为对象的对象,其访问键是用户的用户名。
serializers.py:
from rest_framework import serializers
from django.contrib.auth.models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'username']
views.py:
from django.contrib.auth.models import User
from rest_framework import viewsets
from .serializers import UserSerializer
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
当前输出:
[
{
"id": 1,
"username": "username_a"
},
{
"id": 2,
"username": "username_b"
}
]
期望的输出:
{
"username_a": {
"id": 1
},
"username_b": {
"id": 2
}
}
替代的期望输出:
{
"username_a": {
"id": 1,
"username": "username_a"
},
"username_b": {
"id": 2
"username": "username_b"
}
}
这将有助于获得“替代的所需输出”:
from django.contrib.auth.models import User
from rest_framework import viewsets
from .serializers import UserSerializer
from rest_framework.response import Response
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
def list(self, request):
queryset = User.objects.all()
serializer = UserSerializer(queryset, many=True)
list_of_objects = serializer.data
object_of_objects = {}
custom_key = "username"
for current_object in list_of_objects:
object_of_objects[current_object[custom_key]] = current_object
return Response(object_of_objects)