Я изучил функцию / метод bind () wtforms в комбинации с колбой python3 и jinja.Моя цель - сделать на лету скрытое поле, которое входит в базовую модель во время рендеринга в форме.Я потратил несколько дней на поиски решения, но оно мне не совсем понятно.Как работает привязка несвязанного поля?
Небольшой фрагмент того, что я пробовал
# self.model.append_field(
name="multiselector_results",
field=HiddenField()
)
tmp = HiddenField(
label="multiselector_results",
validators=[],
description="",
id="multiselector_results",
default=""
)
tmp.bind(
self.model,
"multiselector_results"
)
# self.model.multiselector_results.bind(self, tmp)
# self.model._fields["multiselector_results"] = self.model.multiselector_results.bind(
self, HiddenField(), {"name": "multiselector_results"})
# self.model.multiselector_results.bind()
Мой основной класс Form включает эту функцию
@classmethod
def append_field(cls, name, field):
setattr(cls, name, field)
return cls
append_field
Функция находится в главном классе с именем Form
, откуда каждая модель в основном наследуется.Я могу назначить скрытое поле моей модели на лету, которая подтверждает, что метод append_field
действительно работает, но само скрытое поле по какой-то причине остается свободным.Документация для меня недостаточно ясна, поскольку даже ctrl
+ F
вызывает один удар с bind()
.
Вот пара ссылок, на которые я смотрел:
http://wtforms.simplecodes.com/docs/0.6/fields.html
https://wtforms.readthedocs.io/en/latest/forms.html#wtforms.form.Form.__init
https://media.readthedocs.org/pdf/wtforms/2.0.2/wtforms.pdf
https://media.readthedocs.org/pdf/wtforms/1.0.5/wtforms.pdf
http://wtforms.simplecodes.com/docs/1.0.2/fields.html
https://groups.google.com/forum/#!topic/wtforms/cJl3aqzZieA
Я также нашел несколько вопросов о переполнении стека, которые очень близки к этому, но немного отличаются.Эти решения, однако, дали мне новое вдохновение, чтобы попробовать что-то новое.Пример темы:
Как связать поле в функции __init__ формы
Мне нравятся другие представленные решения davidism
, но об этом не может быть и речи вмой случай.
Единственное, что я нашел во всей документации wtforms bind()
If _form and _name isn’t provided, an UnboundField will be returned instead. Call its
bind() method with a form instance and a name to construct the field.
Как можно создать несвязанное поле?