我正在使用“rest_serializer”模块实现 Django REST API 框架:
目前的输出是:
{
"count": 86,
"next": "http://127.0.0.1:8000/state/?page=2",
"previous": null,
"results": [
{
"state_name": "Alaska"
},
{
"state_name": "California"
},
...
]
}
如何将其显示为 json 列表:
[
"Alaska",
"California",
...
]
以下是我的序列化程序:
from .models import States
from rest_framework import serializers
class StateSerializer(serializers.ModelSerializer):
class Meta:
model = State
fields = ('state_name',)
View .py
class StateViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
queryset = States.objects.values('state_name').distinct();
serializer_class = StateSerializer
最佳答案
这是我要做的:由于您想要为您的状态提供自定义序列化表单,我将实现一个自定义序列化程序:
class RawStateSerializer(serializers.BaseSerializer):
def to_representation(self, obj):
return obj.state_name
然后您可以正常使用它来阅读:
class StateViewSet(viewsets.ModelViewSet):
queryset = States.objects.values('state_name').distinct();
serializer_class = RawStateSerializer
请注意,它仅支持读取(它将仅返回单个
GET
的单个字符串和列表 GET
的字符串列表)。如果你也想写支持,你需要覆盖 .to_internal_value()
方法。最后,如果您只需要用于列出组的特殊序列化程序,而需要用于其他操作的常规序列化程序,您可以这样做(基于我的 this answer):
class StateViewSet(viewsets.ModelViewSet):
queryset = States.objects.values('state_name').distinct();
def get_serializer_class(self):
if self.action == 'list':
return RawStateSerializer
return StateSerializer
关于django - 如何在 Django 序列化程序中仅显示值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46125398/