Застряв в этой проблеме, у меня есть таблица с датой, категорией и суммой, и я пытаюсь сделать запрос, который может выбирать между датами для получения записей, но когда я выбираю даты, он кричит «столбец» 2020-12 -12" не существует"
просмотры.py
def outgoings_history(request):
if request.method == "POST":
date_from= request.POST.get('date_from')
date_to= request.POST.get('date_to')
search_result = Outgoings.objects.filter(user=request.user).order_by('-date')\
.raw('SELECT suma, kategoria, date FROM outgoings WHERE date BETWEEN "2020-12-12" AND "2020-12-12"')
return render(request, 'outgoings_history.html', {'data': search_result})
else:
displaydata = Outgoings.objects.filter(user=request.user).order_by('-date')
return render(request, 'outgoings_history.html', {'data': displaydata})
формы.py
class PickADate(forms.Form):
date_from= forms.DateField(widget=DateInput())
date_to= forms.DateField(widget=DateInput())[][1]
Дата «2020-12-12» — это всего лишь пример, и она имеет записи за этот день, но по-прежнему ничего не показывает.
Вам не нужно использовать .raw
для этого, вы можете использовать `.filter():
from django.contrib.auth.decorators import login_required
@login_required
def outgoings_history(request):
search_result = Outgoings.objects.filter(
user=request.user,
).order_by('-date')
if request.method == 'POST':
form = PickADate(request.POST)
if form.is_valid():
date_from = form.cleaned_data['date_from']
date_to = form.cleaned_data['date_to']
search_result = search_results.filter(
date__range=(date_from, date_to)
)
return render(request, 'outgoings_history.html', {'data': search_result})
Примечание: Вы можете ограничить представления до представления для аутентифицированных пользователей с @login_required декоратор [Django-doc].
Спасибо за быстрый ответ. Теперь он говорит: «Представление account.views.outgoings_history не вернуло объект HttpResponse. Вместо этого он вернул None.
Вероятно, это потому, что вы не return render(...)
за пределами if
...
Вы имеете в виду с другим? Я не изменил его. это то же самое, что и в моем предыдущем посте
@Hudy_edd: каждый путь кода должен возвращать ответ HTTP, это означает, что существует комбинация if
и else
, которая ничего не возвращает, следовательно, None
.
Вы используете POST-запрос? Обычно для фильтрации используются GET-запросы.