gpt4 book ai didi

python - Flask-WTForms 如何覆盖单选字段的预验证

转载 作者:太空宇宙 更新时间:2023-11-04 05:20:46 27 4
gpt4 key购买 nike

当用户提交时未选择单选选项并且它不起作用时,我试图引发错误。当我像这样呈现字段时:{{ render_field(form.example) }} 它会打印 (self.gettext('PICK SOMETHING'),但是当我使用下面的格式没有任何反应:

    {% for subfield in form.religion %}
{{ render_field(subfield, class_="foo") }}
{{ render_field(subfield.label) }}
{% endfor %}

radio .py

class ReligionField(SelectField):
widget = ListWidget(prefix_label=False)
option_widget = RadioInput()

def pre_validate(self, form):
for v, _ in self.choices:
if self.data == v:
break
else:
raise ValueError(self.gettext('PICK SOMETHING'))

class ReligionForm(FlaskForm):
religions = ['Christian', 'Muslim', 'Hindu', 'Buddhist']
choices = [(x.lower(), x.title()) for x in sorted(religions)]
religion = ReligionField('Religion', validators=[DataRequired()], choices=choices, render_kw={"class":"post", "type":"radio"})

@app.route('/',methods=['post','get'])
def hello_world():
form = ReligionForm()
if form.validate_on_submit():
print form.religion.data
else:
print form.errors
return render_template('radio.html', form=form)

如果我在没有选择任何选项的情况下提交,如何覆盖 pre_validate 以引发错误?

最佳答案

试试这个脚本:

from flask import Flask
from flask import render_template
from flask import request
from flask import flash
from flask import redirect
from flask_wtf import FlaskForm
from wtforms import SelectField
from wtforms.widgets import ListWidget, RadioInput
from wtforms.validators import DataRequired


app = Flask(__name__)

class ReligionField(SelectField):
widget = ListWidget(prefix_label=False)
option_widget = RadioInput()

def pre_validate(self, form):
for v, _ in self.choices:
if self.data == v:
break
else:
raise ValueError(self.gettext('PICK SOMETHING'))

class ReligionForm(FlaskForm):
religions = ['Christian', 'Muslim', 'Hindu', 'Buddhist']
choices = [(x.lower(), x.title()) for x in sorted(religions)]
religion = ReligionField('Religion', validators=[DataRequired()], choices=choices, render_kw={"class":"post", "type":"radio"})


@app.route('/',methods=['GET','POST'])
def hello_world():
form = ReligionForm(request.form)

if request.method == 'POST':
if form.validate_on_submit():
print form.religion.data
else:
print form.religion.errors[0]
flash(form.religion.errors[0])
return redirect('/')
return render_template('radio.html', form=form)


if __name__ == "__main__":
app.run()

radio .html

{% with messages = get_flashed_messages() %}
{% if messages %}
<ul class=flashes>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}

<form method="post">
{% for subfield in form.religion %}
<li>{{subfield.label}} {{subfield}} </li>
{% endfor %}

<button>Submit</button>
</form>

关于python - Flask-WTForms 如何覆盖单选字段的预验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40436707/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com