feat: base ComplexQueryMixin 支持order查询

This commit is contained in:
caoqianming 2025-05-26 16:31:17 +08:00
parent 42ba894875
commit f4fd214110
2 changed files with 29 additions and 19 deletions

View File

@ -238,10 +238,14 @@ class ComplexQueryMixin:
sr = ComplexSerializer(data=request.data) sr = ComplexSerializer(data=request.data)
sr.is_valid(raise_exception=True) sr.is_valid(raise_exception=True)
vdata = sr.validated_data vdata = sr.validated_data
queryset = self.filter_queryset(self.get_queryset()) queryset = self.get_queryset()
querys = vdata.get('query', [])
if not querys:
new_qs = queryset
else:
new_qs = queryset.none() new_qs = queryset.none()
try: try:
for m in vdata.get('querys', []): for m in querys:
one_qs = queryset one_qs = queryset
for n in m: for n in m:
st = {} st = {}
@ -257,6 +261,11 @@ class ComplexQueryMixin:
new_qs = new_qs | one_qs new_qs = new_qs | one_qs
except Exception as e: except Exception as e:
raise ParseError(str(e)) raise ParseError(str(e))
ordering = vdata.get('ordering', None)
if not ordering:
ordering = getattr(self, 'ordering', None)
if ordering:
new_qs = new_qs.order_by(*ordering.split(','))
page = self.paginate_queryset(new_qs) page = self.paginate_queryset(new_qs)
if page is not None: if page is not None:
serializer = self.get_serializer(page, many=True) serializer = self.get_serializer(page, many=True)

View File

@ -82,5 +82,6 @@ class QuerySerializer(serializers.Serializer):
class ComplexSerializer(serializers.Serializer): class ComplexSerializer(serializers.Serializer):
page = serializers.IntegerField(min_value=0, required=False) page = serializers.IntegerField(min_value=0, required=False)
page_size = serializers.IntegerField(min_value=1, required=False) page_size = serializers.IntegerField(min_value=1, required=False)
ordering = serializers.CharField(required=False)
querys = serializers.ListField(child=QuerySerializer( querys = serializers.ListField(child=QuerySerializer(
many=True), label="查询列表", required=False) many=True), label="查询列表", required=False)