Как использовать вход HTML <select> тега в качестве значения для получения данных Django Models, которые имеют этот конкретный вход в качестве одного из своих данных?
Я использую тег HTML <select>
для того, чтобы пользователь мог выбрать название проекта, где проект - это QuerySet в Django Model. Поэтому я хочу использовать это значение для отображения пользователю других данных, связанных с этим проектом.
Имя HTML <select>
- select_project. В моем views.py я использую значение request.POST['select_project']
и храню его в переменной selected_project
. Чтобы получить другие данные в QuerySet, я использовал Project.objects.filter(title=selected_project)
и сохранил их в переменной displayed_project
, которую затем использовал в представлении, где пользователь видит всю информацию об этом QuerySet.
Но когда пользователь переходит к представлению, он ничего не получает. Только пустой <QuerySet[]>. Пожалуйста, не могли бы вы подсказать, как это можно обойти?
<select class="select_project" name="select_project">
{%for project in projects%}
<option value="" name='select_project'>{{project.title}}</option>
{%endfor%}
Views.py
def overview(request):
if request.method=='POST':
selected_project=request.POST['select_project']
displayed_project=Project.objects.filter(title=selected_project)
return render (request, 'core/overview.html', {
'displayed_project':displayed_project
})
Спасибо!
Попробуйте заполнить значение и имя в теге значением каждого идентификатора проекта или названия. Например:
<select class="select_project" name="select_project">
{%for project in projects%}
<option value="{{project.id}}" name='{{project.title}}'>{{project.title}}</option>
{%endfor%}
Если снова возникнет проблема, пожалуйста, напишите здесь
Я решил эту проблему. Итак, я не знал, что мой View получает значение тега <select>
, а не его содержимое. Поэтому я добавил project.id
к значению тега <select>
. После этого, получив данные POST, я отфильтровал QuerySet по ID следующим образом:
Project.objects.filter(pk=selected_project)
и в конце я получил данные на странице обзора.
Спасибо!