如何使WTForms要求输入RadioButton字段? - python

我正在使用Flask和Flask-WTF创建一个Web表单。表单是动态的,其字段由数据库确定。数据库中的某些问题指定单选按钮字段,而其他问题指定一个单词。

我需要要求单选按钮字段中有一个选择。使用wtforms.validators.DataRequired非常适合于字符串字段,但不适用于单选字段。

...
    if question.category == 'word':
        field = StringField(question.question, validators=[DataRequired()])
    elif question.category == 'likert':
        choices = [('1', 'Strongly Agree'), ('2', ...
        field = RadioField(question.question, choices=choices,
                           validators=[DataRequired()])
    setattr(FlaskForm, str(question.id), field)
stator(FlaskForm, 'submit', SubmitField('Submit))
form = FlaskForm()
....

提交时,将任何字符串字段保留为空白将导致错误消息。但是,如果留下无线电场而没有选择,则什么也不会发生。

我该如何纠正?

python参考方案

我仍然不知道为什么DataRequired(和InputRequired)不能正确使用无线电字段,但是这是我解决的方法。

我将FlaskForm细分为以下内容:

class SurveyForm(FlaskForm):
    class Meta:
        def render_field(self, field, render_kw):
            render_kw.setdefault('required', True)
            return super().render_field(field, render_kw)

通过将动态字段添加到该子类的实例,可以使无线电字段也需要输入。

Flask-RESTful-返回自定义响应格式 - python

我已经按照以下Flask-RESTful文档定义了自定义响应格式。app = Flask(__name__) api = restful.Api(app) @api.representation('application/octet-stream') def binary(data, code, headers=None): resp =…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

Python:同时在for循环中添加到列表列表 - python

我想用for循环外的0索引值创建一个新列表,然后使用for循环添加到相同的列表。我的玩具示例是:import random data = ['t1', 't2', 't3'] masterlist = [['col1', 'animal1', 'an…