Как получить текстовое значение выбранной опции в django views.py - PullRequest
1 голос
/ 20 марта 2019

Например: если выбран первый параметр Regular, как я могу получить значение «1» и его текстовое значение «Regular» в views.py

<form method = "post" action = "{% url 'index' %}">
{% csrf_token %}
<select name = "drop1" >
    <option value="1">Regular</option>
    <option value="2">Medium</option>
    <option value="3">Large</option>
</select>
<input  type = "submit" value="Submit">

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Другое решение (также без использования форм Django), которое я могу придумать, - это использовать Python dict (или list) для хранения всех ваших опций в вашем представлении:

import collections
DROP1_DICT = collections.OrderedDict(
    (1, 'Regular'),
    (2, 'Medium'),
)

def my_view(request):
    ...
    if request.method == 'POST':
        selected_value = request.POST['drop1']
        selected_label = DROP1_DICT[selected_value]
        print(selected_value)
        print(selected_label)
    else:
        ctx = {
            'drop1_dict': DROP1_DICT,
        }
        return render(request, 'my_template.html', ctx)

и рендерингаоснованный на этом шаблон:

<form method = "post" action = "{% url 'index' %}">
    {% csrf_token %}
    <select name = "drop1" >
    {% for k, v in drop1_dict.items %}
        <option value="{{ k }}">{{ v }}</option>
    {% endfor %}
    </select>
    <input type="submit" value="Submit">
</form>

Конечно, если вы просто используете для этого форму django, тогда вся базовая обработка сделана для вас, и вы можете просто пропустить эту часть кода.

0 голосов
/ 20 марта 2019

Значение 1 должно быть в request.POST под ключом drop1.

Это должно помочь вам увидеть выбранное значение в вашем представлении:

print(request.POST['drop1'])

Текстсодержимое тега <option> не представляется на ваш взгляд, только текст внутри атрибута value.Это HTML и веб-дизайн браузера;Python или Django не контролируют то, что отправляется в запросе POST.


Если вам действительно нужно получить обе строки (1 и Regular) в запросе POST, я использовал один обходной путьв прошлом было дублировать текст в теге HTML

<option value"1-Regular">Regular</option>

, чтобы получалось значение 1-Regular;затем я разбил строку в представлении

v1, v2 = request.POST['drop1'].split('-')
print(v1)
print(v2)

Это не идеальное решение, но оно сработало для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...