Porównaj ceny domen i usług IT, sprzedawców z całego świata

[Django Rest Framework]: Serializacja listy list


Pracuję z frameworkami django i django rest
Stworzyłem nowe miejsce docelowe
MedginalApps
. Po uruchomieniu
Get
Żądania dla niego, chcę zwrócić dane zawarte jako lista ciągów (lista zainstalowanych aplikacji)
Lista linii wygląda tak:
<pre class="lang-python prettyprint-override">
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']

Do tej pory pracowałem tylko z modecznymi serializatorami i wszystko było dość proste. Ale teraz nie wiem, jak zwrócić tę listę linii
Oto, czego próbowałem do tej pory:
<pre class="lang-python prettyprint-override">
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')

Zawsze dostaję różnego rodzaju błędy. Czy jest jakaś pomoc, jak odzyskać zawartość listy ciągów?

Aktualizacja

Wypróbowałem kod @ e4c5, zostawiając to tak:
<pre class="lang-python prettyprint-override">
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

I nadal dostaję błędy. Ale nigdzie nie otrzymam komunikatów o błędach. Czy ktoś pomaga?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz użyć
serializers.ListField
http://www.django-rest-framewo ... field
,

ListField to klasa pola, która weryfikuje listę obiektów.
Klasa ListField obsługuje również styl deklaratywny, który umożliwia pisanie klas pól list wielokrotnego użytku.

Możesz napisać niestandardowe pole dla serializatora dziedziczenia z
Listfield
Drf Serializers Form, który akceptuje listę wierszy. Być może to jest, ten przykład jest już pokazany w dokumentach DRF.
class StringListField(serializers.ListField):
child = serializers.CharField()
Teraz możemy ponownie skorzystać z naszego klasa użytkownika Stringlistfield w całej naszej aplikacji, nie dając jej argumentowi dziecka.

To jest z dokumentów, jeszcze tego nie próbowałem. Ale mam nadzieję, że dostaniesz to, czego szukasz.
Możesz na przykład użyć niestandardowego pola w swoim serializatorze
class InstalledAppsSerializer(serializers.Serializer): name = serializers.CharField(max_length=256) child = serializers.CharField() installed_apps_field = StringListField()
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

„Wszystkie rodzaje błędów” prawdopodobnie znikną, jeśli opierasz serializator na serializatorze, a nie na jego polu
ListField
http://www.django-rest-framewo ... Klasa pola, która weryfikuje listę obiektów.

Możesz go użyć, gdy jeden z członków twojej klasy jest listą. Ale nie chcesz używać ListField jako serializatora, ponieważ tak nie jest
class InstalledAppsSerializer(serializers.Serializer): name = serializers.CharField(max_length=256) child = serializers.CharField() installed_apps_field = serializers.SerializerMethodField( 'get_installed_apps')
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Dla

I nadal dostaję błędy. Ale nigdzie nie otrzymam komunikatów o błędach .

Część pytania: Błąd powinien być w odpowiedziach, który otrzymasz od widoku po wysłaniu żądania.
Jeśli masz coś takiego:
response = InstalledAppsViewSet.as_view()(request, **kwargs)
,
Aby wydrukować zawartość odpowiedzi:
response.render (). content
- błąd powinien tam być.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się