Есть ли способ динамически установить значение по умолчанию радиополя wtform из шаблона html? - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь динамически установить значение радиополя в шаблоне HTML, но я не уверен, как установить выбор по умолчанию. Я хочу сделать это, потому что формы, которые я хочу использовать, являются формами, которые могут быть сохранены и отредактированы в случае необходимости, поэтому я хочу, чтобы значения по умолчанию были значениями, установленными при сохранении / отправке ранее.

поля wtform

field_1 = StringField('field_1')
radio_1 = RadioField('radio_1', choices=[(1,'Yes'),(2,'No')])

что я хочу сделать, это что-то вроде этого:

данные являются данными базы данных

{% if data.field_1 = 'X' %}
    {{ form.radio_1(id="radio_1",class="ff-style-radio",default=1) }}
{% else %}
    {{ form.radio_1(id="radio_1",class="ff-style-radio",default=2) }} 
{% endif %}

Я не добился успеха, пытаясь использовать этот метод, менять значение по умолчанию и т. Д. Возможно ли что-то подобное? Если нет, то как мне отделить выбор радиополя wtform, чтобы я мог просто вручную отметить, какой выбор проверен? Или я должен просто использовать базовый метод HTML и сделать что-то вроде этого:

<ul class="ff-style-radio" id="radio_1">
    <li>
        {% if data.field_1 = 'X' %}
            <input id="radio_1-0" name="radio_1" type="radio" value="Yes" checked> 
        {% else %}
            <input id="radio_1-0" name="radio_1" type="radio" value="Yes"> 
        {% endif %}        
        <label for="radio_1-0">Yes</label>
   </li>
    <li>
        {% if data.field_1 = 'X' %}
            <input id="radio_1-1" name="radio_1" type="radio" value="No"> 
        {% else %}
            <input id="radio_1-1" name="radio_1" type="radio" value="No" checked> 
        {% endif %} 
        <label for="radio_1-1">No</label>
    </li>
</ul>

Спасибо за любую помощь

1 Ответ

0 голосов
/ 19 апреля 2019

Если вы хотите использовать форму для редактирования данных, уже находящихся в вашей базе данных, вы должны предоставить эти данные в форму во время создания в функции просмотра. Это позволит вам сохранить ваши шаблоны простыми и пригодными для повторного использования. Данные из базы данных могут быть переданы в форму либо в виде объекта, либо в виде словаря https://wtforms.readthedocs.io/en/stable/forms.html. Если ваша форма отображается непосредственно в таблицу базы данных, вы можете просто передать ее без изменений из вашего запроса. В следующем коде я последовал вашему примеру и создал новый словарь для установки значения radio_1 на основе значения field_1.

@app.route("/myurl")
def myview():
    # do database lookup here
    olddata = {"radio_1": 1 if data.field_1 == "X" else 2}
    form = Myform(formdata=request.form, data=olddata)
    if request.method == "POST" and form.validate():
        # .....
...