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

Witam -kolba-admin nie pokazując ForeignKey kolumny

Powyższy kod jest przykładem strony kolba-admin który próbuję stworzyć. Celem jest stworzenie na stronie Tworzenie dziecka pola tekstowego z nazwą i rozwijanego, aby wybrać rodzica.

Po powyższym ustawieniu jest tylko pole nazwy. Brakuje nadrzędnego menu rozwijanego.

Jakieś pomysły, jak to osiągnąć?

Odpowiedz

10

Jak o tym, czy zmienić klasę Child do tego:

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

nie wiem zbyt wiele o tym, a ja nie wiem, czy trzeba tylną odniesienie, ale ta konfiguracja działa dla mnie z Flask-Admin.

+0

Awesome! Spróbuję tego dziś wieczorem. Czy potrzebuję informacji o Primaryjoin/Secondaryjoin? Otrzymywałem wiele błędów na ten temat. Mam nadzieję, że twoja zmiana zadziała zadziwiająco! – screenshot345

+0

Szczerze mówiąc, nie wiedziałbym. Nigdy nie widziałem nic o primaryjoin/secondaryjoin z Flask-Alchemy lub Flask-Admin. – Robin

+2

Powód, dla którego to działa: Flask-Admin współpracuje z obiektami ORM, takimi jak modele, relacje, itp. Domyślnie Flask-Admin ignoruje klucze obce w modelach, ponieważ zawierają one tylko pewną liczbę i Flask-Admin chce, aby konkretny obiekt ORM działał z. Tak więc, gdy masz klucz obcy w modelu, upewnij się, że nie zapomnisz powiązania poziomu ORM między modelami - relacji. Flask-Admin użyje tego linku, aby wyświetlić powiązany model (y). I nie, nie musisz robić fantazyjnych rzeczy ani dodawać funkcji backrefs, aby to działało. – Joes

13

Prawdopodobnie trzeba określić kilka dodatkowych opcji do kolby-admin poprzez podklasy:

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

Szukałem sposobu na wyświetlenie PK, idealne! – Adversus