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

Hello -pallone-admin non mostrando colonne ForeignKey

Il codice di cui sopra è un esempio di pagina di pallone-admin che sto cercando di creare. L'obiettivo è quello di avere nella pagina di creazione di Child una casella di testo per nome e un menu a discesa per selezionare un genitore.

Con l'impostazione precedente, c'è solo il campo nome. Manca la casella a discesa del genitore.

Qualche idea su come realizzarlo?

risposta

10

Che ne dite se si cambia la classe Child a questo:

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

non so molto su questo, e non so se è necessario il riferimento di nuovo, ma questa configurazione funziona per me con Flask-Admin.

+0

Impressionante! Ci proverò stasera. Ho bisogno di informazioni su primaryjoin/secondaryjoin? Ho ricevuto molti errori a riguardo. Spero che il tuo cambiamento funzioni incredibilmente! – screenshot345

+0

Onestamente, non lo saprei. Non ho mai visto nulla su primaryjoin/secondaryjoin con Flask-Alchemy o Flask-Admin. – Robin

+2

Motivo per cui funziona: Flask-Admin funziona con oggetti ORM, come modelli, relazioni, ecc. Per impostazione predefinita, Flask-Admin ignora le chiavi esterne nei modelli poiché contengono solo un numero e Flask-Admin vuole che l'oggetto ORM concreto funzioni con. Quindi, quando hai una chiave esterna sul modello, assicurati di non dimenticare il collegamento del livello ORM tra i modelli: una relazione. Flask-Admin utilizzerà questo collegamento per visualizzare i modelli correlati. E no, non hai bisogno di fare cose fantasiose o aggiungere backrefs per farlo funzionare. – Joes

13

È probabile necessario specificare alcune opzioni aggiuntive per pallone-admin tramite una sottoclasse:

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

Cercavo un modo per visualizzare i PK, perfetto! – Adversus