2013-04-23 7 views
8
class Parent(db.Model): 
    id = db.Column(db.Integer, primary_key = True) 
    name = db.Column(db.String(120)) 

    def __repr_(self): 
     return '<Parent %r>' % (self.name) 

admin.add_view(ModelView(Parent, db.session)) 


class Child(db.Model): 
    id = db.Column(db.Integer, primary_key = True) 
    name = db.Column(db.String(120)) 
    parent = db.Column(db.Integer, db.ForeignKey(Parent)) 

admin.add_view(ModelView(Child, db.session)) 

こんにちはを示していません。目標は、子の作成ページに名前のテキストボックスを表示し、親を選択するためのドロップダウンを持つことです。フラスコ-adminがForeignKeyの列

上記の設定では、名前欄のみがあります。親のドロップダウンボックスがありません。

どのようにすればいいのでしょうか?

答えて

10

どのようにあなたはこれにChildクラスを変更した場合について:

class Child(db.Model): 
    id = db.Column(db.Integer, primary_key = True) 
    name = db.Column(db.String(120)) 
    parent_id = db.Column(db.Integer, db.ForeignKey('parent.id')) 
    parent = db.relationship('Parent', backref=db.backref('children', lazy='dynamic')) 

が、私はこのことについて多くを知らない、とあなたは後方参照が必要な場合、私は知らないが、このセットアップは私の作品Flask-Adminと一緒に

+0

すごいです!私は今夜​​それを試してみる。 primaryjoin/secondaryjoinの情報は必要ですか?私はそれについて多くの間違いを受けてきました。うまくいけばあなたの変更はすごくうまくいくでしょう! – screenshot345

+0

正直、私は知りません。 Flask-AlchemyやFlask-Adminでprimaryjoin/secondaryjoinについて何も見たことがありません。 – Robin

+2

なぜ動作するのか:Flask-Adminは、モデル、リレーションなどのORMオブジェクトで動作します。デフォルトでは、Flask-Adminはモデル内の外部キーを無視し、Flask-Adminは具体的なORMオブジェクトを必要とします。と。したがって、モデルに外部キーがある場合は、モデル間のORMレベルのリンク、つまり関係を忘れないようにしてください。 Flask-Adminは、このリンクを使用して関連するモデルを表示します。そして、いいえ、あなたは飾り気のないものをやる必要はありません。 – Joes

13

あなたはおそらく、サブクラスを経由してフラスコ-adminにいくつかの追加のオプションを指定する必要があります。

class ChildView(ModelView): 
    column_display_pk = True # optional, but I like to see the IDs in the list 
    column_hide_backrefs = False 
    column_list = ('id', 'name', 'parent') 


admin.add_view(ChildView(Parent, db.session)) 
+0

PKを表示する方法を探していました、完璧! – Adversus

関連する問題