从SQLAlchemy obj更新自定义WTForm widged

2024-10-01 02:23:02 发布

您现在位置:Python中文网/ 问答频道 /正文

Boolean小部件是WTForms中的一个复选框,而我希望在生成的表单中有一个yes/no下拉列表,而不是“true/false”选择。你知道吗

这个自定义小部件几乎可以工作:

class SelectYesNo(SelectField):

    def __init__(self, *args, **kwargs):
        kwargs['choices'] = [('Yes', 'Yes'), ('No', 'No')]
        super(SelectYesNo, self).__init__(*args, **kwargs)        

    def process_formdata(self, valuelist):
        if valuelist:
            try:
                self.data = False
                if valuelist[0] == 'Yes':
                    self.data = True
            except ValueError:
                raise ValueError(u'Invalid Choice: could not coerce (valuelist: {0})'.format(valuelist))

    def pre_validate(self, form):
        pass

现在,当我在窗体上使用.populate_obj方法时,它可以正常工作,也就是说,它正确地将bool存储在SQLAlchemy对象中,就像form.populate_obj(SQAItem())(我可以在DB中看到表中存储了正确的值)。你知道吗

它不起作用的地方是以form = form_class(request.POST, sqa_item_instance)的形式将SQA对象值读入这个小部件,其中sqa_item_instance是从SQLAlchemy读取的,并且有一个bool字段。你知道吗

我怎样才能从SQA项中正确地得到“填充”表单SelectYesNo字段呢?你知道吗


Tags: noselfform表单dataifinit部件