Поддержка WTForms для ввода атрибута только для чтения? - PullRequest
17 голосов
/ 07 марта 2012

Здесь говорят, что это не поддерживается из коробки.

Знаете ли вы, как в полях ввода HTML можно использовать атрибут readonly с WTForms?

Ответы [ 4 ]

21 голосов
/ 24 марта 2012

Полагаю, вы говорите об атрибуте <input readonly> в HTML / XHTML, который не является тем, о чем вы говорили в этой ветке обсуждения.(связанная ветка о проблеме более низкого уровня с тем, как игнорировать переданный ввод формы)

Способ установить атрибут readonly (и, действительно, любой атрибут в поле) является ключевым аргументом в вашем шаблоне,При использовании Jinja это выглядит следующим образом (html5):

{{ form.myfield(readonly=true) }}

И для XHTML или версий WTForms старше 0.6.3:

{{ form.myfield(readonly="readonly") }}

Просто обратите внимание, что атрибут readonlyэто только подсказка для браузера, и это не влияет на то, что пользователь отправляет.Это значит, что злоумышленник (или кто-то, использующий браузер с настраиваемой JS-а-ля greasemonkey, консоль JS или дерево DOM) может сгенерировать POST-запрос, изменяя значение поля независимо от того, установлен ли атрибут readonly натег ввода.

По этой причине атрибут readonly полезен только в качестве опции для изменения взаимодействия с пользователем (например, отключение поля на основе какого-либо события / действия с использованием JS) и ввода, поступающего из 'Поле «только для чтения» не более надежно, чем любая другая форма ввода.

14 голосов
/ 04 апреля 2017

Решение использует render_kw в объявлении поля формы.

my_field = fields.StringField('Label', render_kw={'readonly': True})
4 голосов
/ 24 августа 2015

https://wtforms -components.readthedocs.org / о / последний / #

from wtforms import Form, DateField, TextField
from wtforms_components import TimeField, read_only

class EventForm(Form):
    name = TextField('Name')
    start_date = DateField('Start date')
    start_time = TimeField('Start time')

    def __init__(self, *args, **kwargs):
        super(EventForm, self).__init__(*args, **kwargs)
        read_only(self.name)
0 голосов
/ 14 сентября 2018

Другая возможность - использовать скрытое поле, а затем, по вашему мнению, вы можете распечатать {{ form.field.data }} для отображения в виде текста.

...