簡體   English   中英

Django Rest Serializer返回空

[英]Django Rest Serializer returns empty

我正在關注本教程( 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

您應該使用many=True序列化器的參數來序列化多個對象。 您也可以直接將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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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