Как использовать ввод тега HTML в качестве значения для получения данных моделей Django, которые содержат этот конкретный ввод в качестве одного из своих данных?

#python #html #django

Вопрос:

Я использую HTML <select> -тег, чтобы позволить пользователю выбрать название проекта, где проект представляет собой набор запросов в модели Django. Поэтому я хочу использовать это значение для отображения пользователю других данных, связанных с этим проектом. Имя HTML <select> -файла-select_project. В моем views.py, Я использую request.POST['select_project'] и сохраняю его в переменной selected_project . Чтобы получить другие данные в наборе запросов, я использовал Project.objects.filter(title=selected_project) и сохранил их в переменной displayed_project , которую затем использовал в представлении, в котором пользователь видит всю информацию об этом наборе запросов.

введите описание изображения здесь

Но когда пользователь переходит к просмотру, он ничего не получает. Только пустой <набор запросов[]>. Пожалуйста, не могли бы вы помочь предложить способ обойти это?

 <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
            })
 

Спасибо!

Комментарии:

1. Можете ли вы добавить изображение для отображаемого html вывода, сгенерированного Django для этого выбора. Просто щелкните правой кнопкой мыши на этом элементе и выберите inspect element . Я хочу посмотреть, хорош ли ваш выбранный элемент

2. Хорошо, я добавлю это в пост. Из него вы можете увидеть, что «Строительство в Лагосе» — это единственное название проекта, указанное в качестве опции, поскольку в модели в настоящее время есть только 1 запрос. Ты хоть что-нибудь видишь в этом?

Ответ №1:

Попробуйте заполнить значение и имя в теге значением каждого идентификатора или заголовка проекта. Например:

 <select class="select_project" name="select_project">
    {%for project in projects%}
    <option value="{{project.id}}" name='{{project.title}}'>{{project.title}}</option>
    {%endfor%}
 

Если снова возникнет проблема, пожалуйста, напишите здесь

Комментарии:

1. Спасибо, но я получил ошибку MultiValueDictKeyError на странице, где должны отображаться данные набора запросов. Однако я использовал запрос. ОПУБЛИКУЙТЕ[‘{{project.title}}’] в связи с вашим предложением использовать это в качестве нового имени для тега select.

Ответ №2:

Я решил эту проблему. Поэтому я не знал, что мой взгляд получает ценность <select> , а не на самом деле его содержание. Поэтому я затем добавил значение project.id к значению <select> тега. После этого и после получения данных POST я отфильтровал набор запросов, используя идентификатор следующим образом: Project.objects.filter(pk=selected_project) и в конце я получил данные на странице обзора.

Спасибо!