【问题标题】:Django Rest Serializer returns emptyDjango Rest 序列化器返回空
【发布时间】:2018-10-29 00:12:07
【问题描述】:

我正在学习本教程 (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

【问题讨论】:

    标签: python django python-3.x serialization django-rest-framework


    【解决方案1】:

    您应该使用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)
    

    由于您的视图一次返回这么多对象,建议您添加pagination

    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)
    

    【讨论】:

    • 非常感谢@neverwalkaloner!它就像一个魅力!并感谢您的建议。很有帮助!
    猜你喜欢
    • 2021-01-17
    • 2021-09-27
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2014-08-17
    • 2021-10-02
    • 2018-10-13
    相关资源
    最近更新 更多