长时间读者,第一次问问。我有点不确定如何表达我想要完成的事情。使用Flask
和SQLAlchemy
,我试图将记录(在本例中为system.xxx)中的数据放入表中。当我使用system.xxx
时,我也会得到列名,如下图所示:
这是我在我的jinja模板中使用的代码:
{% block page_content %}
<div class="page-header">
<h1>{{ system.serial }}</h1>
</div>
<hr width="80%">
<table class="table", border="5">
<tr>
<th>Status</th>
<th>Assignee</th>
</tr>
<tr>
<td>{{ system.status }}</td>
<td>{{ system.assignee }}</td>
</tr>
</table>
{% endblock %}
如何在未获得&{39; system.xxx
&#39;的情况下访问Status u
或者&#39; Assignee u
&#39;栏目信息?我花了几个小时在互联网上试图解决这个问题,但我不知道如何正确地表达这个问题。
补充:烧瓶视图。
@main.route('/system/<serial>', methods=['GET'])
def system(serial):
system = System.query.filter_by(serial=serial).first_or_404()
return render_template('system.html', system=system)
补充:有问题的模型
#table of individual systems
class System(db.Model):
__tablename__ = 'systems'
id = db.Column(db.Integer, primary_key=True)
serial = db.Column(db.String(64))
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
status_id = db.Column(db.Integer, db.ForeignKey('statuses.id'))
assignee_id = db.Column(db.Integer, db.ForeignKey('assignees.id'))
admin = db.Column(db.String)
def __repr__(self):
return '<System %r>' % self.serial
#table of assignees
class Assignee(UserMixin, db.Model):
__tablename__ = 'assignees'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
email = db.Column(db.String(64), unique=True, index=True)
systems = db.relationship('System', backref='assignee', lazy='dynamic')
def __repr__(self):
return '<Assignee %r>' % self.name
#table of status options
class Status(db.Model):
__tablename__ = 'statuses'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
systems = db.relationship('System', backref='status', lazy='dynamic')
@staticmethod
def insert_statuses():
statuses = ['Available', 'Loaned', 'Scrapped']
for status in statuses:
s = Status(name=status)
db.session.add(s)
db.session.commit()
def __repr__(self):
return '<Status %r>' % self.name
答案 0 :(得分:1)
我认为您通过模板中的relationship属性访问了相关的Status
和Assignee
对象,然后使用string representation呈现它们。相反,您应该访问要显示的属性:
<td>{{ system.status.name }}</td>
<td>{{ system.assignee.name }} {{ system.assignee.email }}</td>
由于您始终会访问这些关系,因此您应该考虑加载它们。
答案 1 :(得分:0)
您可以显式查询仅所需的列。
first_result = session.query(System.xxx).filter(System.serial == serial).scalar()
您可能还希望使用one_or_none()
,one()
或all()
,具体取决于您的使用案例。