[英]Django Rest Serializer returns empty
I'm following this tutorial ( Django Rest Framework ) and I'm facing a problem when I try to use serializers. 我正在关注本教程( Django Rest Framework ),并且在尝试使用序列化程序时遇到问题。 It returns a empty result, instead the 49086 records that it should to return. 它返回一个空结果,而不是49086记录它应返回。 My query it's ok because when I try to show the data without serializers it's shows these data. 我的查询没问题,因为当我尝试不使用序列化程序显示数据时,就会显示这些数据。 Please, what I'm doing wrong? 拜托,我做错了什么?
models.py 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 serializers.py
from rest_framework import serializers
from .models import Workers
class WorkersSerializer(serializers.ModelSerializer):
class Meta:
model = Workers
fields = '__all__'
views.py 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
You should use many=True
serializer's argument to serialize multiple objects. 您应该使用many=True
序列化器的参数来序列化多个对象。 Also you can pass serializer.data
directly as Response
argument: 您也可以直接将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)
Since your view return so many objects at once, I suggest you to add 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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.