flask-sqlalchemy - Flask 调用关联数据展示到视图

查看:627
本文介绍了flask-sqlalchemy - Flask 调用关联数据展示到视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

请教如何调用关联数据.

models.py

class Role(db.Model):
    __tablename__ = 'roles'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    users = db.relationship('User', backref='role', lazy='dynamic')
   
class User(UserMixin, db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(64), unique=True, index=True)
    username = db.Column(db.String(64), unique=True, index=True)
    password_hash = db.Column(db.String(128))
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'), nullable=True)
    ticketholiday_id = db.relationship('Ticketholiday', backref='user', lazy='dynamic')
    
class Ticketholiday(db.Model):
    __tablename__ = 'ticketholidays'
    id = db.Column(db.Integer, primary_key=True)
    type = db.Column(db.Integer)
    about = db.Column(db.Text)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)

比如一个视图
views.py

def index():
    tcicketholiday = Tciketholiday.query.filter_by(id=1).first()
    return render_template('index.html', holiday=holiday)

index.html

{% if holiday %}
类型: {{holiday.}}
注册账号:
昵称: 
{% endfor %}

请问这个怎么调用到注册账号和昵称呢?

昵称是在role表里的name
注册账号是user表里的username

调用注册账号应该是一次关联查询就可以了.
调用昵称是需要两次关联查询,首先查询到user然后在用user里的role_id去查对应的name..

请问该怎么调用

感谢各位了.

解决方案

你是在看Miguel Grinberg的 Flask Web开发 吧,,那里有解释,但不是很清楚。
我来给你解释下,注意你在Role数据库模型中的uses,它并不是roles表中的字段,users = db.relationship('User', backref='role', lazy='dynamic'),relationship的第一个参数表示这个关系的另一个数据库模型是哪个,这里是User,第二个参数backref表示给关联的数据库模型添加一个属性,这里是role。
也就是说,你可以通过User模型的role这个属性去访问Role模型,比如你在views.py中的查询结果,你可以通过user.role.name得到roles表中对应记录的name,user.role.id则得到roles表中对应记录的id
注意名称的大小写,一一对应

这篇关于flask-sqlalchemy - Flask 调用关联数据展示到视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆