Динамическое поле WTForms: связывание неограниченного поля с помощью bind () - PullRequest
0 голосов
/ 28 февраля 2019

Я изучил функцию / метод 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.

Как можно создать несвязанное поле?

...