Tôi đã nâng cấp từ Django 1.10.4 lên 1.11.1 và đột nhiên tôi nhận được rất nhiều thông báo sau khi chạy thử nghiệm của mình:
lib/python3.5/site-packages/rest_framework/pagination.py:208:
UnorderedObjectListWarning:
Pagination may yield inconsistent results with an unordered object_list:
<QuerySet [<Group: Requester>]>
paginator = self.django_paginator_class(queryset, page_size)
Tôi đã truy nguyên điều đó trở lại mô-đun Phân trang Django: https://github.com/django/django/blob/master/django/core/paginator.py#L100
Nó dường như liên quan đến mã bộ truy vấn của tôi:
return get_user_model().objects.filter(id=self.request.user.id)
Làm cách nào để tìm thêm thông tin chi tiết về cảnh báo này? Có vẻ như tôi cần thêm dấu order_by(id)
vào cuối mỗi bộ lọc, nhưng dường như tôi không thể tìm thấy mã nào cần thêm order_by (vì cảnh báo không trả lại dấu vết ngăn xếp và vì vậy nó xảy ra ngẫu nhiên trong quá trình thử nghiệm của tôi chạy).
Cảm ơn!
Biên tập:
Vì vậy, bằng cách sử dụng @KlausD. mẹo chi tiết, tôi đã xem xét một bài kiểm tra gây ra lỗi này:
response = self.client.get('/api/orders/')
Điều này xảy ra OrderViewSet
nhưng không có thứ nào trong get_queryset gây ra nó và không có thứ gì trong lớp serializer gây ra nó. Tôi có các thử nghiệm khác sử dụng cùng một mã để nhận / api / các đơn đặt hàng và những thử nghiệm đó không gây ra lỗi đó .... DRF làm gì sau get_queryset?
https://github.com/encode/django-rest-framework/blob/master/rest_framework/pagination.py#L166
Nếu tôi đặt dấu vết vào phân trang thì tôi nhận được một loạt nội dung liên quan đến khung phần còn lại django nhưng không có gì chỉ ra truy vấn nào của tôi đang kích hoạt cảnh báo đơn hàng.
-v 2
trên hầu hết những người chạy thử nghiệm)