feat: base 从request.data获取page和size

This commit is contained in:
caoqianming 2024-03-11 08:45:21 +08:00
parent 779488589a
commit 7eba5a8e13
2 changed files with 32 additions and 10 deletions

View File

@ -1,4 +1,4 @@
from rest_framework.pagination import PageNumberPagination
from rest_framework.pagination import PageNumberPagination, _positive_int
from rest_framework.exceptions import ParseError
@ -9,8 +9,25 @@ class MyPagination(PageNumberPagination):
page_size = 10
page_size_query_param = 'page_size'
def get_page_number(self, request, paginator):
if 'page' in request.data:
return request.data['page']
return super().get_page_number(request, paginator)
def get_page_size(self, request):
if 'page_size' in request.data:
try:
return _positive_int(
request.data['page_size'],
strict=True,
cutoff=self.max_page_size
)
except (KeyError, ValueError):
pass
return super().get_page_size(request)
def paginate_queryset(self, queryset, request, view=None):
if request.query_params.get('pageoff', None) or request.query_params.get('page', None) == '0':
if request.query_params.get('pageoff', None) or request.query_params.get('page', None) == '0' or request.data.get('page', None) in (0, '0'):
if queryset.count() < 3000:
return None
raise ParseError('单次请求数据量大,请分页获取')

View File

@ -6,8 +6,10 @@ from rest_framework.request import Request
class PkSerializer(serializers.Serializer):
ids = serializers.ListField(child=serializers.CharField(max_length=20), label="主键ID列表")
soft = serializers.BooleanField(label="是否软删除", default=True, required=False)
ids = serializers.ListField(
child=serializers.CharField(max_length=20), label="主键ID列表")
soft = serializers.BooleanField(
label="是否软删除", default=True, required=False)
class GenSignatureSerializer(serializers.Serializer):
@ -39,17 +41,20 @@ class CustomModelSerializer(DynamicFieldsMixin, serializers.ModelSerializer):
def update(self, instance, validated_data):
if self.request:
if hasattr(instance, 'update_by'):
validated_data['update_by'] = getattr(self.request, 'user', None)
validated_data['update_by'] = getattr(
self.request, 'user', None)
return super().update(instance, validated_data)
class QuerySerializer(serializers.Serializer):
field = serializers.CharField(label='字段名')
compare = serializers.ChoiceField(label='比较式', choices=["", "!", "gte", "gt", "lte", "lt", "in", "contains"])
compare = serializers.ChoiceField(
label='比较式', choices=["", "!", "gte", "gt", "lte", "lt", "in", "contains"])
value = serializers.CharField(label='')
class ComplexSerializer(serializers.Serializer):
# page = serializers.IntegerField(min_value=0)
# page_size = serializers.IntegerField(min_value=1)
# query = serializers.CharField(label='获取字段名')
querys = serializers.ListField(child=QuerySerializer(many=True), label="查询列表", required=False)
page = serializers.IntegerField(min_value=0, required=False)
page_size = serializers.IntegerField(min_value=1, required=False)
querys = serializers.ListField(child=QuerySerializer(
many=True), label="查询列表", required=False)