显示具有外键和分页的模型

时间:2016-07-15 10:11:20

标签: python flask sqlalchemy jinja2

我有一个烧瓶,sqlalchemy,jinja2应用程序,以及以下问题。 我试图在html表格中显示一个模型并对其进行分页。该模型中有一堆外键,所以在表中我看到了外键。我想显示模型的__repr__或该模型的其中一个字段 # models.py

class WorkLog(db.Model):
    __tablename__ = 'work_log'
    id = db.Column(db.Integer, primary_key=True)
    mechanic = db.Column(db.Integer, db.ForeignKey('users.id'))
    building_id = db.Column(db.Integer, db.ForeignKey('buildings.id'))
    elevator_id = db.Column(db.Integer, db.ForeignKey('elevators.id'))
    work_type_id = db.Column(db.Integer, db.ForeignKey('work_type.id'))
    component_id = db.Column(db.Integer, db.ForeignKey('component.id'))
    date = db.Column(db.Date(), default=datetime.utcnow().date())
    time_in = Column(TIME(), default=(datetime.utcnow() - timedelta(hours=4)).time())
    time_out = Column(TIME(), default=(datetime.utcnow() - timedelta(hours=2)).time())
    notes = db.Column(db.Text)

view函数传递带分页的模型

#views.py

# build the time review table with pagination
    u = User.query.get(current_user.get_id())

    work_logs = u.work_log.paginate(page, 10, False).items

    return render_template('mechanic/mechanic.html', form=form, logs=work_logs)

模板的相关部分

mechanic.html

<table class="table table-striped">
                    <thead>
                        <tr>
                            <th>Building</th>
                            <th>Elevator</th>
                            <th>Work Type</th>
                            <th>Time In</th>
                            <th>Time Out</th>
                        </tr>
                    </thead>
                    <tbody>
                        {% for log in logs %}

                            <tr>
                                <td>{{ log.building_id }}</td>
                                <td>{{ log.elevator_id }}</td>
                                <td>{{ log.work_type_id }}</td>
                                <td>{{ log.time_in }}</td>
                                <td>{{ log.time_out }}</td>
                            </tr>
                        {% endfor %}
                    </tbody>
                </table>

三个字段结束id是外键,并且希望显示该对象或字段的__repr__。我最好的办法是什么。

1 个答案:

答案 0 :(得分:0)

你只需要定义两个模型之间的关系 - 你已经定义了FK关系,所以很简单:

buildings = db.relationship('Buildings')

可让您{{ log.buildings }}获取__repr__对象的Buildings