django - 如何在 Django 序列化程序中仅显示值?

标签 django django-rest-framework django-serializer

我正在使用“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/

相关文章:

Django REST Swagger 使用 permission_classes=[IsAuthenticated] 隐藏 ModelViewSet

django - 查询集过滤器中使用的 EmptyQuerySet 上的 value_list 返回完整集

django - 如何在 Django rest API 检索 View 中获取相关对象?

django - Django:发送电子邮件导致OSError

django - 嵌套序列化程序 django rest 框架中的上下文

django:为什么我们在 modelSerializer 中使用嵌套元类?

django - 如何为 Azure 中的 django 项目获取 SSL 证书?

json - DRF APIClient 中 content_type=application/json 和 format=json 的区别

python - DRY 调用 serializer.data 不会返回模型的更新实例

Django:在模型 save() 方法中返回序列化程序验证错误