0

ページ番号と各ページのページサイズを入力するDjango関数ベースのAPIがあります。ここに私のコードです。Djangoのページ分割によるページ数の限界値がまだ残っていません。

@api_view(['POST']) 
def attendance_all_get_list_by_page(request): 
    # ----- YAML below for Swagger ----- 
    """ 
    description: attendance_all_get_list_by_page 
    parameters: 
     - name: page 
     type: integer 
     required: true 
     location: form 
     - name: page_limit 
     type: integer 
     required: true 
     location: form     
    """ 
    attendance_list = Attendance.objects.all().order_by('id') 

    page = request.GET.get('page', request.POST['page']) 
    paginator = Paginator(attendance_list, request.POST['page_limit']) 

    try: 
     attendances = paginator.page(page) 
    except PageNotAnInteger: 
     attendances = paginator.page(request.POST['page']) 
    except EmptyPage: 
     attendances = paginator.page(paginator.num_pages) 


    serializer = AttendanceSerializer(list(attendances), many=True) 
    data = serializer.data[:] 
    return Response(data, status=status.HTTP_200_OK) 

私のシリアライザ:

class EmployeeSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Employee 
     fields = ("id", "username") 

class AttendanceSerializer(serializers.ModelSerializer): 
    employee = EmployeeSerializer(many=False, read_only=True) 

    class Meta: 
     model = Attendance 
     fields = ('id','employee','created_at') 

(これがあるべき私はページ= 2 PAGE_LIMIT = 2と例えば、それは次のように表示されます

16,17,18,19 

の出席記録を持っていたと想像4レコードの最後のページ)

[ 
    { 
    "id": 18, 
    "employee": { 
     "id": 16, 
     "username": "haha" 
    }, 
    "created_at": "2017-12-28T03:29:29.698339Z" 
    }, 
    { 
    "id": 19, 
    "employee": { 
     "id": 16, 
     "username": "haha" 
    }, 
    "created_at": "2017-12-28T03:38:53.639749Z" 
    } 
] 

私は(ページ= 3 PAGE_LIMIT = 2)または(ページ= 10 PAGE_LIMIT = 2)、それはまだ

[ 
    { 
    "id": 18, 
    "employee": { 
     "id": 16, 
     "username": "haha" 
    }, 
    "created_at": "2017-12-28T03:29:29.698339Z" 
    }, 
    { 
    "id": 19, 
    "employee": { 
     "id": 16, 
     "username": "haha" 
    }, 
    "created_at": "2017-12-28T03:38:53.639749Z" 
    } 
] 

が表示されますなかった場合に予想される結果は

[] 

いただきました私のページネーションと間違っている必要があります何かが最後のページに影響を与えています。最後のページに最後のページの結果が表示されるようにしたいが、その後は空のレコードリストにする必要がある。

答えて

0

EmptyPageをキャッチして最後のページのコンテンツを返します。あなたが範囲外の場合は、毎回2ページ目を取得します。 この場合、空リストを返す必要があります。

except EmptyPage: 
    attendances = [] 
関連する問題