【发布时间】:2019-06-12 09:49:55
【问题描述】:
我创建了一对多关系,但我不确定如何发布从下拉菜单中选择的组织以及已创建的新站点详细信息。
基本页面布局将包含已创建并存储在数据库组织表中的组织名称的下拉列表。最终用户选择一个组织,然后输入站点的新名称并单击提交。
代码如下,任何帮助将不胜感激。
应用程序.py
@app.route('/add_site')
def add_site():
""" Find and show field from db for the user to fill in """
form = AddSite()
organisations = db.session.query(Organisation)
return render_template('add_site.html', form=form,
organisations=organisations)
@app.route('/insert_site', methods=['GET', 'POST'])
def insert_site():
""" Insert populated fills from add_site to db """
form = AddSite()
site_name = Site(site_name=form.site_name.data)
db.session.add(site_name)
db.session.commit()
return redirect(url_for('get_org'))
forms.py
class AddSite(FlaskForm):
""" Adding new site """
site_name = StringField('Site Name', validators=[DataRequired()])
submit = SubmitField('Add Site')
模型.py
class Organisation(db.Model):
""" Table to store organisation details """
id = db.Column(db.Integer, primary_key=True, index=True,
unique=True)
org_name = db.Column(db.String())
timestamp = db.Column(db.DateTime, index=True,
default=datetime.utcnow)
sites = db.relationship('Site', backref='org_name', lazy='dynamic')
def __init__(self, org_name):
self.org_name = org_name
class Site(db.Model):
""" Table to store site details """
id = db.Column(db.Integer, primary_key=True)
site_name = db.Column(db.String())
timestamp = db.Column(db.DateTime, index=True,
default=datetime.utcnow)
org_id = db.Column(db.Integer, db.ForeignKey('organisation.id'))
def __init__(self, site_name):
self.site_name = site_name
add_site.html
<form action=" {{url_for('insert_site') }}" method="POST" class="col-12">
{{ form.hidden_tag() }}
<div class="col s12">
<select name="organisation_list">
<option value="" disabled selected>Choose an
Organisation</option>
{% for org in organisations %}
<option value ="{{org.org_name}}">{{org.org_name}}</option>
{% endfor %}
</select>
<label>Organisations</label>
</div>
<div class="row">
<div class="col s12">
{{ form.site_name.label }}
{{ form.site_name(size=32) }}
</div>
</div>
<div class="row">
<buttom>
{{ form.submit() }}
</buttom>
</div>
</form>
最终结果是将多个站点映射到一个组织。这样我就可以创建一个页面来显示一个组织下的所有网站。
【问题讨论】:
-
你的问题不太清楚你到底想做什么以及你需要如何帮助。
-
html 页面在下拉菜单中显示组织列表。当我去添加一个新站点时,我不确定如何在提交表单时将下拉菜单中选择的组织的数据传回数据库,以说明该站点已链接到该组织。我已经在models.py中的两个表之间建立了一对多的关系,但是当我添加一个新站点时,org_id列只显示
null,而它应该显示在中选择的组织的ID下拉菜单。希望这是有道理的! -
你试过我的解决方案了吗?
-
@kellymandem 是的,非常感谢您提供的脚本。但是现在 HTML 部分遇到了麻烦。如何在下拉菜单中显示每个组织?抱歉,对 Python 和 Flask 非常陌生,仍然需要大量学习。
标签: python-3.x flask flask-sqlalchemy flask-wtforms