ORA-00904: "2022-01-20": недопустимый идентификатор
У меня проблема с выводом результатов поиска записей между двумя диапазонами дат из базы данных.
Ниже приведен фрагмент моего кода:
Жду вашей помощи:
def mostraDate(request):
if request.method == "POST":
fromDate = request.POST.get('fromDate')
toDate = request.POST.get('toDate')
cursor = Sms.objects.raw('select process_id, date_received,originator_msisdn, error_code from sms where date_replyed between "'+fromDate+'"and"'+toDate+'"')
#cursor = Sms.objects.raw('''select process_id, date_received,originator_msisdn, error_code from sms where date_replyed between ''', [fromDate] ,'''and''' ,[fromDate])
return render(request, 'mostraDate.html', {"data": cursor})
else:
displaydate= Sms.objects.order_by('date_received').reverse()
paginator = Paginator(displaydate, 5)
page = request.GET.get('page')
displaydate = paginator.get_page(page)
return render(request, 'mostraDate.html', {"data": displaydate})
Вы можете передать оба параметра и работать с:
def mostraDate(request):
if request.method == 'POST' and 'fromDate' in request.POST and 'toDate' in request.POST:
displaydate = Sms.objects.raw(
'SELECT process_id, date_received,originator_msisdn, error_code'
'FROM sms'
'WHERE date_replyed BETWEEN %s AND %s',
[request.POST['fromDate'], request.POST['toDate']]
)
else:
displaydate = Sms.objects.order_by('-date_received')
paginator = Paginator(displaydate, 5)
page = request.GET.get('page')
displaydate = paginator.get_page(page)
return render(request, 'mostraDate.html', {'data': displaydate})
Но нет необходимости использовать raw запрос. Фактически, делая это, вы теряете возможность упорядочить, отфильтровать и разбить на страницы. Вы можете фильтровать с помощью:
def mostraDate(request):
if request.method == 'POST' and 'fromDate' in request.POST and 'toDate' in request.POST:
displaydate = Sms.objects.filter(date_replyed__range=(request.POST['fromDate'], request.POST['toDate']))
else:
displaydate = Sms.objects.order_by('-date_received')
paginator = Paginator(displaydate, 5)
page = request.GET.get('page')
displaydate = paginator.get_page(page)
return render(request, 'mostraDate.html', {'data': displaydate})
Обычно вы фильтруете данные с помощью GET-запроса, POST-запрос обычно используется для изменения состояния, например, для входа/выхода, создания/обновления/удаления сущности и т.д. Запрос GET обычно используется для получения данных. Это могут быть все данные или отфильтрованный вариант. Поэтому здесь более уместен запрос GET.