2017-09-12 8 views
1

長時間の読者、初めての質問者。私は達成しようとしていることを表現する方法が少し分かりません。 FlaskSQLAlchemyを使用して、レコード(この場合はsystem.xxx)のデータをテーブルに格納しようとしています。私はsystem.xxxを使用する場合は下図のように、私はまた、カラム名を取得:フラスコSQLAlchemy - カラム名なしのレコードデータにアクセス

what I don't want

これは私が私の神社テンプレートで使用しているコードです:

{% block page_content %} 
<div class="page-header"> 
    <h1>{{ system.serial }}</h1> 
</div> 
<hr width="80%"> 
<table class="table", border="5"> 
    <tr> 
     <th>Status</th> 
     <th>Assignee</th> 
    </tr> 
    <tr> 
     <td>{{ system.status }}</td> 
     <td>{{ system.assignee }}</td> 
    </tr> 
</table> 
{% endblock %} 

私はsystem.xxxにアクセスするにはどうすればよいです'Status u'または 'Assignee u'列情報を取得せずに私はこれを理解しようとしているインターウェブ上で文字通り数時間を過ごしましたが、質問を正しく表現する方法はわかりません。

追加:フラスコビュー。

@main.route('/system/<serial>', methods=['GET']) 
def system(serial): 
    system = System.query.filter_by(serial=serial).first_or_404() 
    return render_template('system.html', system=system) 

を追加しました:質問

#table of individual systems 
class System(db.Model): 
    __tablename__ = 'systems' 
    id = db.Column(db.Integer, primary_key=True) 
    serial = db.Column(db.String(64)) 
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow) 
    status_id = db.Column(db.Integer, db.ForeignKey('statuses.id')) 
    assignee_id = db.Column(db.Integer, db.ForeignKey('assignees.id')) 
    admin = db.Column(db.String) 

    def __repr__(self): 
     return '<System %r>' % self.serial 

#table of assignees 
class Assignee(UserMixin, db.Model): 
    __tablename__ = 'assignees' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(64)) 
    email = db.Column(db.String(64), unique=True, index=True) 
    systems = db.relationship('System', backref='assignee', lazy='dynamic') 

    def __repr__(self): 
     return '<Assignee %r>' % self.name 

#table of status options 
class Status(db.Model): 
    __tablename__ = 'statuses' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(64)) 
    systems = db.relationship('System', backref='status', lazy='dynamic') 

    @staticmethod 
    def insert_statuses(): 
     statuses = ['Available', 'Loaned', 'Scrapped'] 
     for status in statuses: 
      s = Status(name=status) 
      db.session.add(s) 
     db.session.commit() 

    def __repr__(self): 
     return '<Status %r>' % self.name 
+0

このテンプレートを生成するフラスコビューを共有できますか? –

+0

投稿にビューを追加しました。ありがとうございます。 –

+1

'status'と' assignee'は実際に関係プロパティですか?あなたのモデルを含めてください。つまり、[mcve]を作ります。 Prolly –

答えて

1

テンプレートのrelationshipプロパティでStatusAssigneeオブジェクトにアクセスしていて、string representationを使用してレンダリングしていると考えました。代わりに、表示する属性にアクセスする必要があります。

 <td>{{ system.status.name }}</td> 
     <td>{{ system.assignee.name }} {{ system.assignee.email }}</td> 

いつもそれらの関係にアクセスするので、それらをeagerloadingすることを検討する必要があります。

+0

これはまさに私が探していたものです。助けてくれてありがとう!私はeagerloadingを調べます。 –

0

中のモデルは、明示的のためにあなたがしたいだけ列を照会することができます。

first_result = session.query(System.xxx).filter(System.serial == serial).scalar() 

また、あなたのユースケースに応じてone_or_none()one()またはall()を使用することをお勧めします。

+0

私は探している情報(system.status)を得ることができますが、列名も含まれているので、単純にLoanedではなくと表示されます。 –

+0

私は 'System.status'が' Enum'型であると推測しています。 'status'の文字列表現を取得したい場合は、' str(system.status) 'または' system.status.value'か実際のEnum型実装が提供するものを使用する必要があります。 –

関連する問題