[英][Django rest framework]: Serialize a list of strings
我正在使用 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 是一個字段類,用於驗證對象列表。
ListField 類還支持聲明式樣式,允許您編寫可重用的列表字段類。
您可以為從ListField
繼承的序列化程序編寫自定義字段,形成接受字符串列表的 drf 序列化程序。 也許像這樣,這個例子已經在 DRF 文檔中顯示了。
class StringListField(serializers.ListField):
child = serializers.CharField()
我們現在可以在整個應用程序中重用我們的自定義 StringListField 類,而不必為其提供子參數。
這些來自文檔,我還沒有嘗試過。 但希望你能得到你想要的。
您可以在序列化程序中使用自定義字段,例如,
class InstalledAppsSerializer(serializers.Serializer):
name = serializers.CharField(max_length=256)
child = serializers.CharField()
installed_apps_field = StringListField()
如果您將序列化程序基於序列化程序而不是序列化程序字段,“各種錯誤”可能會消失
驗證對象列表的字段類。
當您的班級成員之一是列表時,您可能希望使用它。 但是您不想將 ListField 作為序列化程序,因為它不是一個
class InstalledAppsSerializer(serializers.Serializer):
name = serializers.CharField(max_length=256)
child = serializers.CharField()
installed_apps_field = serializers.SerializerMethodField(
'get_installed_apps')
它適用於序列化字符串列表
class MySerializer(serializers.Serializer):
installed_apps = serializers.ListSerializer(child=serializers.CharField())
它返回
['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']
為了
而且我仍然遇到錯誤。 但我在任何地方都沒有收到錯誤消息。
問題的一部分:錯誤應該在您發送請求后從視圖收到的響應中。
如果你有類似的東西:
response = InstalledAppsViewSet.as_view()(request, **kwargs)
,
打印響應的內容:
response.render().content
- 錯誤應該在那里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.