Django Rest Serializer возвращается пустым - PullRequest
0 голосов
/ 18 мая 2018

Я следую этому уроку ( Django Rest Framework ) и сталкиваюсь с проблемой при попытке использовать сериализаторы.Он возвращает пустой результат, вместо 49086 записей, которые он должен вернуть.Мой запрос в порядке, потому что, когда я пытаюсь показать данные без сериализаторов, он показывает эти данные.Пожалуйста, что я делаю не так?

models.py

# coding=utf-8

from __future__ import unicode_literals
from django.db import models


class Workers(models.Model):
    chapa = models.IntegerField(primary_key=True)
    emp_cod = models.IntegerField(primary_key=False)
    class Meta:
        managed = False
        db_table = 'WORKERS'

serializers.py

from rest_framework import serializers
from .models import Workers


class WorkersSerializer(serializers.ModelSerializer):
    class Meta:
        model = Workers
        fields = '__all__'

views.py

...
@api_view(['GET'])
@permission_classes((permissions.AllowAny,))
def get_all_workers(request):
    data = Workers.objects.using('rh').all().order_by('emp_cod')
    print(data.count()) # Returns 49086
    serializer = WorkersSerializer(data)
    print(serializer.data) # Returns {}
    json = JSONRenderer().render(serializer.data)
    return Response(json) # Returns Django Rest standard page with "{}" data

1 Ответ

0 голосов
/ 18 мая 2018

Вы должны использовать аргумент many=True serializer для сериализации нескольких объектов.Также вы можете передать serializer.data непосредственно как Response аргумент:

@api_view(['GET'])
@permission_classes((permissions.AllowAny,))
def get_all_workers(request):
    data = Workers.objects.using('rh').all().order_by('emp_cod')
    serializer = WorkersSerializer(data, many=True)
    return Response(serializer.data)

Поскольку ваше представление возвращает столько объектов одновременно, я предлагаю вам добавить нумерацию страниц :

from rest_framework.pagination import PageNumberPagination

@api_view(['GET'])
@permission_classes((permissions.AllowAny,))
def get_all_workers(request):
    data = Workers.objects.using('rh').all().order_by('emp_cod')
    paginator = PageNumberPagination()
    paginator.page_size = 10
    result_page = paginator.paginate_queryset(data, request)
    serializer = WorkersSerializer(result_page, many=True)
    return Response(serializer.data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...