Xar*_*Xar 9 python django django-rest-framework
我正在使用django和djando休息框架
我已经创建了一个新的端点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']
Run Code Online (Sandbox Code Playgroud)
到目前为止,我只使用模型序列化器,一切都很简单.但现在我不知道如何返回这个字符串列表
这是我到目前为止所尝试的:
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')
Run Code Online (Sandbox Code Playgroud)
我总是遇到各种错误.
有关如何做到这一点的任何帮助?返回字符串列表的内容
更新
我试过@ 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
Run Code Online (Sandbox Code Playgroud)
我仍然会遇到错误.但是我没有在任何地方收到错误消息.有帮助吗?
zai*_*zil 15
你可以使用serializers.ListField
,
ListField是一个验证对象列表的字段类.
ListField类还支持声明式样式,允许您编写可重用的列表字段类.
您可以为序列化程序编写一个自定义字段,该字段继承自ListField
接受字符串列表的drf序列化程序.也许是这样,这个例子已经在DRF文档中显示了.
class StringListField(serializers.ListField):
child = serializers.CharField()
Run Code Online (Sandbox Code Playgroud)
我们现在可以在整个应用程序中重用我们的自定义StringListField类,而无需为其提供子参数.
这些来自文档,我还没有尝试过.但希望你得到你想要的东西.
您可以在序列化程序中使用自定义字段,如,
class InstalledAppsSerializer(serializers.Serializer):
name = serializers.CharField(max_length=256)
child = serializers.CharField()
installed_apps_field = StringListField()
Run Code Online (Sandbox Code Playgroud)
小智 7
它适用于序列化字符串列表
class MySerializer(serializers.Serializer):
installed_apps = serializers.ListSerializer(child=serializers.CharField())
Run Code Online (Sandbox Code Playgroud)
它返回
['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']
Run Code Online (Sandbox Code Playgroud)
如果您将序列化器基于序列化器而不是序列化器字段,那么“各种错误”可能会消失
验证对象列表的字段类。
当您的班级成员之一是列表时,您可能需要使用它。但你不想将 ListField 作为序列化器,因为它不是一个
class InstalledAppsSerializer(serializers.Serializer):
name = serializers.CharField(max_length=256)
child = serializers.CharField()
installed_apps_field = serializers.SerializerMethodField(
'get_installed_apps')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6315 次 |
最近记录: |