我正在建立一个简单的CMS,包括一个配置文件管理页面。在这个配置文件页面上,还有其他字段,有一个下拉列表,我使用wtforms扩展的QuerySelectField从表“parks”生成:
from wtforms.ext.sqlalchemy.fields import QuerySelectField
配置文件页面上的其余字段由“user”表填充。在
假设用户已经登录,并且他们在“user”表中的记录已经填充。“user”表中的字段中有一个外键,用于“parks”表中的值:“park_id”。在
当登录用户导航到他们的配置文件页面时,我想在下拉列表中显示与该用户的park_id外键值相对应的选择。在
请注意,Flask/Python等人对我来说是非常陌生的。另外,我使用的是Flask Security,下面的用户模型基于他们的示例。或许我需要与用户/公园建立另一种关系?在
显示用户保存的配置文件信息,包括可能出现在下拉列表中以供编辑的信息对我来说是非常基本的。我担心我遗漏了一些基本的东西。到目前为止,其他类似的问题/答案对我来说似乎非常混乱。在
我的用户模型:
^{pr2}$我的公园模型:
class Parks(db.Model):
id = db.Column(db.Integer, primary_key=True)
park = db.Column(db.String(255))
我的个人资料表(带查询工厂的东西)
def get_parks():
return Parks.query
class ProfileForm(Form):
id = HiddenField()
email = HiddenField()
park_id = QuerySelectField('Park',[validators.InputRequired(u'Please select a park')], default=19, query_factory=get_parks, get_label='park', allow_blank=True)
weather_zip = StringField('Zip Code',[validators.Length(min=5, max=5, message=u'Zip must contain 5 numbers'), validators.InputRequired(u'please enter a 5-digit zip code')])
flickr_api_key = StringField('Flickr API Key', [validators.InputRequired(u'Please supply a Flickr API key')])
flickr_api_secret = StringField('Flickr API Secret', [validators.InputRequired(u'Please supply a Flickr API secret')])
flickr_user_id = StringField('Flickr User ID', [validators.InputRequired(u'Please supply a Flickr user id')])
flickr_set_id = StringField('Flickr Set ID', [validators.InputRequired(u'Please supply a Flickr set id')])
我的个人资料页面视图:
@app.route('/profile/<id>', methods=["GET","POST"])
@login_required
def profile_page(id):
id = id
current_user = User.query.filter_by(id=id).first()
form = ProfileForm(obj=current_user)
return render_template("profile.html", form=form)
我的模板表单:
{% from "_formhelpers.html" import render_field %}
<form method=post action="/profile">
<dl>
{{ form.id(value=current_user.id) }}
{{ form.email(value=current_user.email) }}
{{ render_field(form.park_id) }}
{{ render_field(form.weather_zip) }}
{{ render_field(form.flickr_api_key) }}
{{ render_field(form.flickr_api_secret) }}
{{ render_field(form.flickr_user_id) }}
{{ render_field(form.flickr_set_id) }}
</dl>
<p><input type=submit value=Register>
</form>
呈现字段的宏(可能相关?)公司名称:
{% macro render_field(field) %}
<dt>{{ field.label }}
<dd>{{ field(**kwargs) |safe }}
{% if field.errors %}
<ul class=errors>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</dd>
{% endmacro %}
谢谢你对这一切的帮助。在
{在我的一个搜索结果中,我发现了一个来自我的用户的搜索结果
一个特别的细节是,我必须从当前用户的查询结果中手动分配每个字段值(除了QuerySelectField,parks)。这是因为,在我的例子中,简单地将当前的用户结果传递给“obj=”arg就会覆盖我的QuerySelectField关键字(在我的例子中是“park_id”),因为“obj=current_user”赋值已经包含了它自己的park_id参数实例,尽管它不适用于在我的下拉列表中显示默认选择。在
所以。。。修复方法是更新我的profile_page view函数,如下所示:
相关问题 更多 >
编程相关推荐