feat: base ComplexQueryMixin 支持order查询
This commit is contained in:
parent
42ba894875
commit
f4fd214110
|
@ -238,25 +238,34 @@ 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()
|
||||||
new_qs = queryset.none()
|
querys = vdata.get('query', [])
|
||||||
try:
|
if not querys:
|
||||||
for m in vdata.get('querys', []):
|
new_qs = queryset
|
||||||
one_qs = queryset
|
else:
|
||||||
for n in m:
|
new_qs = queryset.none()
|
||||||
st = {}
|
try:
|
||||||
if n['compare'] == '!': # 如果是排除比较式
|
for m in querys:
|
||||||
st[n['field']] = n['value']
|
one_qs = queryset
|
||||||
one_qs = one_qs.exclude(**st)
|
for n in m:
|
||||||
elif n['compare'] == '':
|
st = {}
|
||||||
st[n['field']] = n['value']
|
if n['compare'] == '!': # 如果是排除比较式
|
||||||
one_qs = one_qs.filter(**st)
|
st[n['field']] = n['value']
|
||||||
else:
|
one_qs = one_qs.exclude(**st)
|
||||||
st[n['field'] + '__' + n['compare']] = n['value']
|
elif n['compare'] == '':
|
||||||
one_qs = one_qs.filter(**st)
|
st[n['field']] = n['value']
|
||||||
new_qs = new_qs | one_qs
|
one_qs = one_qs.filter(**st)
|
||||||
except Exception as e:
|
else:
|
||||||
raise ParseError(str(e))
|
st[n['field'] + '__' + n['compare']] = n['value']
|
||||||
|
one_qs = one_qs.filter(**st)
|
||||||
|
new_qs = new_qs | one_qs
|
||||||
|
except Exception as 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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue