簡體   English   中英

[Django rest 框架]:序列化一個字符串列表

[英][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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM