我最近刚使用flask和sql-alchemy进入web开发。一切都工作正常,直到我不得不使用外键访问值。我有这样的模型:
class User(db.Model):
_tablename='user'
id=db.Column(db.Integer, primary_key=True)
name=db.Column(db.String)
email=db.Column(db.String)
class Post(db.Model):
_tablename='post'
id=db.Column(db.Integer, primary_key=True)
title=db.Column(db.String)
user=db.Column(db.Integer, db.ForeignKey('user.id'))
我想在网页上显示所有帖子的列表,在html文件中显示如下:
{% for entry in entries %}
<tr>
<td> {{ entry.id }} </td>
<td> {{ entry.title }} </td>
<td> {{ entry.user_name }} </td>
<td> {{ entry.user_email }} </td>
{% endfor %}
但是,我不知道如何使用user.id外键从用户表访问用户和电子邮件。我试过了
posts = Post.query.all()
for post in posts:
post.user_name = User.query.filter_by(id=post.id).first()
return render_template('post.html', entries=posts)
然而,不是只返回名称和电子邮件,就像帖子中的标题一样,它返回的内容类似于(u'User A',)和(u'test@test.com',)。我想不出任何其他方式。任何人都可以帮我吗?
答案 0 :(得分:5)
你在那里是almolst但是下面的代码实际上并没有返回用户名。它返回整个用户对象:
User.query.filter_by(id=post.id).first() # Does Not return user_name but returns the user object
所以我会称之为:
userobj = User.query.filter_by(id=post.id).first()
然后您可以检索用户名,电子邮件地址为:
if userobj is not None: # Make sure user exists
username = userobj.name
email = userobj.email
作为捷径,你也可以这样做:
username = User.query.filter_by(id=post.id).first().name
email = User.query.filter_by(id=post.id).first().email
答案 1 :(得分:0)
首先的解决方案是使用相关字段进行查询。 您可以使用以下查询获取用户详细信息: 让我们假设用户模型中的 id 为 1,post 模型中的用户值为 1,即(id=1, user=1)。
将帖子模型与用户模型联系起来 您将把它们与相关领域相关联,即 (用户模型有 id,Post 模型有 user 作为外键)
import Post #import post 模型
user = User.query.filter(User.id==Post.user).first()
下面将给出用户创建的帖子模型中的第一个帖子
导入用户#导入用户模型
post = Post.query.filter(Post.user==User.id).first()
post.id
post.title
user.name
user.email
您也可以查询以获取以下所有帖子
posts = Post.query.filter(Post.user==User.id).all()