2016-07-15 13 views
0

Ich habe eine Flasche, sqlalchemy, jinja2 App mit dem folgenden Problem. Ich versuche, ein Modell in einer HTML-Tabelle anzuzeigen und Paginierung damit zu haben. Das Modell enthält eine Reihe von Fremdschlüsseln, so dass in der Tabelle der Fremdschlüssel angezeigt wird. Ich möchte die __repr__ des Modells oder eines der Felder dieses Modells anzeigen.
# models.pyAnzeigen Modelle mit Fremdschlüssel und Paginierung

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) 

Die Ansicht Funktion übergibt Modell mit Paginierung

#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) 

Der relevante Teil der Vorlage

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> 

Es ist die drei Felder, die ID beenden, die ein Fremdschlüssel sind und das __repr__ für das Objekt oder ein Feld anzeigen möchten. Was ist mein bester Weg, dies zu tun?

Antwort

0

Sie müssen nur die Beziehung zwischen den beiden definieren Models- Sie bereits die FK Beziehung definiert haben, so etwas Einfaches wie:

buildings = db.relationship('Buildings') 

würden Sie ermöglichen {{ log.buildings }} zu tun, um die __repr__ der Buildings zu erhalten Objekt.

+0

Danke! Ich hatte bereits die Beziehung dort in den anderen Modellen, die 'relation()' mit der 'backref =' Option verwenden. So konnte ich 'log.building' in der Vorlage verwenden und es funktionierte. –