Here they say it's not supported out of the box.¿Compatible con WTForms para el atributo readonly de entrada?
¿Conoces alguna manera de hacer que los campos de formulario de entrada HTML usen el atributo 'readonly' con WTForms?
Here they say it's not supported out of the box.¿Compatible con WTForms para el atributo readonly de entrada?
¿Conoces alguna manera de hacer que los campos de formulario de entrada HTML usen el atributo 'readonly' con WTForms?
Supongo que está hablando sobre el atributo <input readonly>
en HTML/XHTML, que no es de lo que trata el hilo de discusión que vinculó. (el hilo vinculado es sobre un problema de nivel inferior con cómo ignorar la entrada de formulario pasado)
La forma de establecer un atributo de solo lectura (y de hecho cualquier atributo en un campo) es como una palabra clave-arg en su plantilla. Si el uso de Jinja, esto parece (HTML5):
{{ form.myfield(readonly=true) }}
Y para XHTML o versiones de WTForms mayores de 0.6.3:
{{ form.myfield(readonly="readonly") }}
Ten en cuenta que el atributo 'sólo lectura' es sólo un indicio al navegador, y no tiene impacto en lo que el usuario envía. Es decir, un usuario malintencionado (o alguien que utiliza un navegador con JS personalizado a la greasemonkey o una consola JS o un árbol DOM) podría generar una solicitud POST cambiando el valor de un campo independientemente de si el atributo de solo lectura está configurado en el etiqueta de entrada Por este motivo, el atributo readonly solo es útil como una opción para modificar la experiencia del usuario (por ejemplo, deshabilitar un campo basado en algún evento/acción usando JS) y la entrada proveniente de un campo 'readonly' no más confiable que cualquier otra forma de entrada.
https://wtforms-components.readthedocs.org/en/latest/#
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)
La solución está utilizando render_kw
en la declaración de campo de formulario.
my_field = fields.StringField('Label', render_kw={'readonly': True})
Y, si desea acceder desde Jinja2, puede hacerlo: {% if form.my_field.render_kw.readonly} readonly blabla {% endif%} – techniao
Parece un poco tonto que no puede pasar esto en tan kwargs al widget o algo cuando se está declarando su forma. – coleifer