Как я могу использовать несколько request.query_params в условиях с помощью Django
Здесь я использую request.query_params для получения параметра в API через URL. через URL, но в настоящее время я пытаюсь использовать несколько параметров в соответствии с условиями, например: здесь в одном условии я беру поле, страницу, строки. условия, например: здесь в одном условии я беру поле, страницу, строки и в другом условии я беру страницу, строки и так далее, но это учитывается только первое условие и игнорируются остальные условия.
class SampleView(APIView):
def get(self, request):
if request.query_params['page'] and request.query_params['rows']: # Pagination
page = int(request.query_params['page'])
rows = int(request.query_params['rows'])
val1 = rows*(page-1)
val2 = (val1+rows)
qry = DeviceControlPolicy.objects.all()[val1:val2]
qry_length = DeviceControlPolicy.objects.count()
serializer = DeviceControlPolicySerializer(qry, many=True).data
data = {
'count': qry_length,
'data': serializer
}
return Response(data)
elif request.query_params['field'] and request.query_params['page'] and request.query_params['rows']:
page = int(request.query_params['page'])
rows = int(request.query_params['rows'])
val1 = rows * (page - 1)
val2 = (val1 + rows)
field = request.query_params['field']
qry = DeviceControlPolicy.objects.all().order_by(field).values()[val1:val2]
qry_length = DeviceControlPolicy.objects.count()
print(qry_length)
serializer = DeviceControlPolicySerializer(qry, many=True).data
data = {
'count': qry_length,
'data': serializer
}
return Response(data)
Пожалуйста, помогите мне, как я могу сделать это и могу ли я использовать несколько условий, используя различное количество параметров.
В каждом условии необходимо проверить значения всех параметров, даже если их значение должно быть False
.
class SampleView(APIView):
def get(self, request):
if request.query_params.get('page') and request.query_params.get('rows') and not request.query_params.get('field'):
page = int(request.query_params['page'])
rows = int(request.query_params['rows'])
val1 = rows*(page-1)
val2 = (val1+rows)
qry = DeviceControlPolicy.objects.all()[val1:val2]
qry_length = DeviceControlPolicy.objects.count()
serializer = DeviceControlPolicySerializer(qry, many=True).data
data = {
'count': qry_length,
'data': serializer
}
return Response(data)
elif request.query_params.get('field') and request.query_params.get('page') and request.query_params.get('rows'):
page = int(request.query_params['page'])
rows = int(request.query_params['rows'])
val1 = rows * (page - 1)
val2 = (val1 + rows)
field = request.query_params['field']
qry = DeviceControlPolicy.objects.all().order_by(field).values()[val1:val2]
qry_length = DeviceControlPolicy.objects.count()
print(qry_length)
serializer = DeviceControlPolicySerializer(qry, many=True).data
data = {
'count': qry_length,
'data': serializer
}
return Response(data)
Метод get
допускает None
значения.
Я пробовал это, что насчет этого, это тоже не работает:
def get(self, request):
if request.query_params['page'] and request.query_params['rows']:
# field=request.query_params['field']?request.query_params['field']:"id"
page = int(request.query_params['page'])
rows = int(request.query_params['rows'])
val1 = rows * (page - 1)
val2 = (val1 + rows)
field = "id"
if request.query_params['field']:
field = request.query_params['field']
if request.query_params['order'] is 1:
qry = DeviceControlPolicy.objects.all().order_by(field).values()[val1:val2]
else:
qry = DeviceControlPolicy.objects.all().order_by("-" + field).values()[val1:val2]
qry_length = DeviceControlPolicy.objects.count()
print(qry_length)
serializer = DeviceControlPolicySerializer(qry, many=True).data
data = {
'count': qry_length,
'data': serializer
}
return Response(data)