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