对象
class MyObj:
def __init__(self, data_dict):
self.id = ''
self.name = ''
self.minDescription = ''
self.descriptions = ''
class MyObjForm(Form):
name = StringField('name')
minDescription = StringField('minDescription')
descriptions = TextAreaField('descriptions')
路由
在“ POST”和“ GET”模式下可以很好地工作。单击时,“提交”按钮会有很好的反应。
@app.route("/create", methods=["GET", "POST"])
@login_required
def create():
if request.method == 'POST':
form = MyObjForm(request.form)
if form.validate():
new_obj = MyObj(request.form)
return redirect(url_for("/"))
else:
return render_template('create.html', form=form)
else:
return render_template('create.html', form=MyObjForm())
当我以“ GET”模式进行路由时,我的代码是好的工作,并且视图中有旧的对象数据,但是单击“提交”按钮没有任何反应。
@app.route("/edit/<id>", methods=["GET", "POST"])
@login_required
def edit(id):
if request.method == 'GET':
old_obj = d.get_by_id(id)
form = MyObjForm(obj=old_obj)
return render_template('create.html', form=form, id=id)
else:
#never entry
pass
HTML'create.html'
<form method="post" role="form">
{{ form.csrf }}
{{ macros.render_field(form.name) }}
{{ macros.render_field(form.minDescription) }}
{{ macros.render_field(form.descriptions) }}
<input class="btn special" type="submit" value="Save"/>
</form>
我尝试:
<form method="post" role="form" action="{{ url_for('edit', id=id) }}">
这:
class MyObjForm(Form):
id = StringField()
任何没有进展的人:(
错了吗?
答案 0 :(得分:0)
我确定了问题:
如果在MyObjForm创建保存按钮时不使用args('obj = new_obj'),也会在发布模式下调用我的路线
当我发布问题时,也简化了问题的描述。 Realy MyObjForm包含BooleanField:
class MyObjForm(Form):
name = StringField('name')
minDescription = StringField('minDescription')
descriptions = TextAreaField('descriptions')
isArchive = BooleanField('Is not public')
我没有注意到复选框由于我不知道的原因而停止出现在表单上。标准渲染方法用于输出:
{{ macros.render_field2(form.isArchive) }}
{% macro render_field2(field) %}
{{ field.label }}
{{ field(**kwargs)|safe }}
{% if field.errors %}
{% for error in field.errors %}
{{ error }}
{% endfor %}
{% endif %}
{% endmacro %}
要解决可视化问题,请执行以下操作:
<input type="checkbox" id="isArchive" name="isArchive">
<label for="isArchive">{{ form.isArchive.label }}</label>
{% for error in form.isArchive.errors %}
<li><font color="red">{{ error }}</font></li>
{% endfor %}
最后一件事。没注意到如何,但是当您添加对象时,表单也停止了工作,不再通过验证。原因是{{ form.csrf }}}
,必须将其替换为{{ form.csrf_token() }}
。仍然必须删除BooleanField的验证参数。
现在问题已部分解决。我将这些问题与flask-security组件的安装相关联。不幸的是,我无法正常显示该复选框,但至少我可以继续前进。
如果有人对这些东西之间如何关联或我错了什么有任何想法,请告诉我。我不想在知识上留下空白。