python - [Django 休息框架] : Serialize a list of strings

标签 python django django-rest-framework

我正在使用 django 和 djando rest 框架

我创建了一个新端点 installedapps。当向它发出 GET 请求时,我想返回包含的数据作为字符串列表(已安装应用程序列表)

字符串列表看起来像这样:

installed_apps = ['django_admin_bootstrapped', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.humanize', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_js_reverse', 'djcelery', 'bootstrap3', 'foo', 'bar', 'apirest']

到目前为止,我只使用模型序列化程序,一切都非常简单。但是现在我不知道如何返回这个字符串列表

这是我目前尝试过的:

class InstalledAppsViewSet(viewsets.ViewSet):
    serializer_class = serializers.InstalledAppsSerializer

    def list(self, request):
        from credits.views import GetInstalledApps

        installed_apps = GetInstalledApps.get_installed_apps()

        serializer = serializers.InstalledAppsSerializer(
            instance=installed_apps, many=True)

        return Response(serializer.data)




class InstalledAppsSerializer(serializers.ListField):

    name = serializers.CharField(max_length=256)

    child = serializers.CharField()

    installed_apps_field = serializers.SerializerMethodField(
        'get_installed_apps')

我总是遇到各种错误。关于如何返回字符串列表的内容有什么帮助吗?

更新

我已经试过@e4c5 代码了,把它留成这样:

class InstalledAppsViewSet(viewsets.ViewSet):
    serializer_class = serializers.InstalledAppsSerializer

    def list(self, request):

        serializer = serializers.InstalledAppsSerializer


class InstalledAppsSerializer(serializers.Serializer):

    name = serializers.CharField(max_length=256)

    child = serializers.CharField()

    installed_apps = serializers.SerializerMethodField('get_the_installed_apps')


    def get_the_installed_apps(self):
        from credits.views import GetInstalledApps
        installed_apps = GetInstalledApps.get_installed_apps()

        return installed_apps

而且我仍然遇到错误。但是我在任何地方都没有收到错误消息。有帮助吗?

最佳答案

您可以使用 serializers.ListField ,

ListField is a field class that validates a list of objects.

The ListField class also supports a declarative style that allows you to write reusable list field classes.

您可以为继承自 ListField 的序列化程序编写自定义字段,形成接受字符串列表的 drf 序列化程序。也许像这样,这个例子已经显示在 DRF 文档中。

class StringListField(serializers.ListField):
    child = serializers.CharField()

We can now reuse our custom StringListField class throughout our application, without having to provide a child argument to it.

这些来自文档,我还没有尝试过。但希望您能找到想要的东西。

您可以在序列化程序中使用自定义字段,例如,

class InstalledAppsSerializer(serializers.Serializer):

    name = serializers.CharField(max_length=256)

    child = serializers.CharField()

    installed_apps_field = StringListField()

关于python - [Django 休息框架] : Serialize a list of strings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44366748/

相关文章:

python - Django 不格式化 GAE 上的日期时间,所有内容都是 UTC

django - 使用 FileField 在 Django 中保存原始文件名

python - 如何从序列化程序获取数据参数?

python - 跨多个时间段计算前 10 名或前 X 名列表的有效方法

Python 代码——也许是十六进制?

python - for 循环中项目的编号列表

python - 从 Pandas 行创建列表字典?

python - 如何在Django中查看为测试模型创建的SQL?

python - Django REST 框架——如何将外键解析为实际值,而不是索引?

django - DecimalField 充当默认值 0.00 的浮点字段?