WTForms booleanfield всегда возвращает True - PullRequest
0 голосов
/ 12 июня 2019

Я написал на заказ FieldList:

    class EventForm(Form):
        enabled = BooleanField()
        user_role = IntegerField()


    class EventsForm(Form):
        user_roles = FieldList(FormField(EventForm))
        section_name = StringField()

class CompanyForm(BaseForm):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._populate_event_permissions()

        def _populate_event_permissions(self):
        permissions = get_all_event_permissions()
        for event, value in permissions.items():
            form_field = self.event.append_entry(
                data={'section_name': event})
            field_1 = form_field.user_roles.append_entry(
                data={'enabled': True, 'user_role': 8})
            field_1.enabled.label.text = 'Participant'
            field_1.enabled.name = value
            field_2 = form_field.user_roles.append_entry(
                data={'user_role': 9})
            field_2.enabled.label.text = 'Organizer'
            field_2.enabled.name = value
            field_3 = form_field.user_roles.append_entry(
                data={'user_role': 10})
            field_3.enabled.label.text = 'Admin'
            field_3.enabled.name = value

Рендерится красиво в шаблоне, но каждый раз, когда я пытаюсь отправить его, а флажки False, он всегда отправляет True, как в append_entry. Вот как я проверяю свои входные данные.

class MyView(BaseModelView):
    def on_model_change(self, form, model, is_created):
        for section in form.event.entries:
            for entry in section.user_roles.entries:
                print(entry.enabled.data)

Похоже, что форма всегда отправляет default value, независимо от того, установлен ли флажок True или False, я также определил предварительное заполнение формы, и если я вручную установил значение в базе данных на False, он правильно отобразит ввод как False, но когда я отправляю форму снова (независимо от того, какие статусы флажков) перезаписывает базу данных в True. Существует определенная проблема, что форма не видит отредактированные значения. Как я могу решить это?

1 Ответ

0 голосов
/ 14 июня 2019

Вы устанавливаете значение полей формы в методе init самой формы. Это, вероятно, переопределяет значения, которые были установлены в форме из request.form как часть загрузки соответствующего представления.

Вместо этого вы должны заполнить поля по мере необходимости в scaffold_form() или create_form() / edit_form().

class MyView(BaseModelView):
    def scaffold_form(self):
        form = super(MyView, self).scaffold_form()

        permissions = get_all_event_permissions()
        for event, value in permissions.items():
            form_field = self.event.append_entry(data={'section_name': event})
            # etc.

        return form
...