2013-04-23 3 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)) 

안녕하세요 표시되지. 목표는 하위 페이지 만들기에서 이름 텍스트 상자를 사용하고 하위 항목을 선택하여 부모를 선택하는 것입니다.플라스크 - 관리자는 외래 키 열

위의 설정에서 이름 필드 만 있습니다. 상위 드롭 다운 상자가 없습니다.

아이디어를 얻으려면 어떻게해야합니까?

답변

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

당신은 가능성이 서브 클래스를 통해 플라스크-관리자에 몇 가지 추가 옵션을 지정해야합니다

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