使用flask sql-alchemy上的外键引用值

Woh*_*mer 2 python sqlite foreign-key-relationship flask flask-sqlalchemy

我最近刚使用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'))
Run Code Online (Sandbox Code Playgroud)

我想在网页上显示所有帖子的列表,在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 %}
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何使用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)
Run Code Online (Sandbox Code Playgroud)

但是,然后不仅仅返回名称和电子邮件,如帖子中的标题,它返回的内容类似于(u'User A',)和(u'test@test.com',).我想不出任何其他方式.任何人都可以帮助我吗?

cod*_*eek 5

你在那里almolst但是下面的代码实际上并没有返回用户名.它返回整个用户对象:

User.query.filter_by(id=post.id).first() # Does Not return user_name but returns the user object
Run Code Online (Sandbox Code Playgroud)

所以我会称之为:

userobj = User.query.filter_by(id=post.id).first()
Run Code Online (Sandbox Code Playgroud)

然后你可以检索用户名,发送电子邮件为:

if userobj is not None: # Make sure user exists
    username = userobj.name
    email = userobj.email
Run Code Online (Sandbox Code Playgroud)

作为捷径,您还可以:

username = User.query.filter_by(id=post.id).first().name
email = User.query.filter_by(id=post.id).first().email
Run Code Online (Sandbox Code Playgroud)