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.

Вернуться на верх