Wil*_*ann 2 python django serialization python-3.x django-rest-framework
我正在关注本教程(Django Rest Framework),当我尝试使用序列化程序时遇到了问题。它返回一个空结果,而不是它应该返回的 49086 条记录。我的查询没问题,因为当我尝试在没有序列化程序的情况下显示数据时,它会显示这些数据。请问,我做错了什么?
模型.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'
Run Code Online (Sandbox Code Playgroud)
序列化程序.py
from rest_framework import serializers
from .models import Workers
class WorkersSerializer(serializers.ModelSerializer):
class Meta:
model = Workers
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
视图.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
Run Code Online (Sandbox Code Playgroud)
您应该使用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)
Run Code Online (Sandbox Code Playgroud)
由于您的视图一次返回这么多对象,我建议您添加分页:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4397 次 |
| 最近记录: |