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

Merhaba gösterilmiyor. Amaç, çocuğun oluşturduğu sayfa için ad için bir metin kutusu ve ebeveyn seçmek için bir aşağı açılan kutuya sahip olmaktır.şişesi-admin ForeignKey sütunlar

Yukarıdaki kurulumda yalnızca ad alanı vardır. Üst açılır kutu eksik.

Bunun nasıl gerçekleşeceği hakkında bir fikriniz var mı?

cevap

10

Nasıl bu kadar Child sınıf değiştirirseniz hakkında:

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

Bu konuda çok şey bilmiyorum ve geri başvuru gerekiyorsa bilmiyorum ama bu kurulum benim için çalışıyor Flask-Admin ile.

+0

Müthiş! Bu gece deneyeceğim. Herhangi bir primaryjoin/secondaryjoin bilgilerine ihtiyacım var mı? Bununla ilgili çok fazla hata alıyorum. Umarım değişiminiz çok çalışır! – screenshot345

+0

Dürüst olmak gerekirse, bilmem. Flask-Alchemy veya Flask-Admin ile primaryjoin/secondaryjoin hakkında hiçbir şey görmedim. – Robin

+2

Neden işe yaradığının nedeni: Flask-Admin, modeller, ilişkiler vb. Gibi ORM nesneleriyle çalışır. Varsayılan olarak, Flask-Admin, bazı numaralar içerdiği için modellerde yabancı anahtarları göz ardı eder ve Flask-Admin, beton ORM nesnesinin çalışmasını ister. ile. Yani, modelde yabancı anahtarınız olduğunda, modeller arasındaki ORM seviyesi bağlantısını unutmamaya dikkat edin - bir ilişki. Flask-Admin ilgili model (ler) i görüntülemek için bu bağlantıyı kullanacaktır. Ve hayır, iş yapmak için süslü şeyler yapmanıza veya backrefs eklemenize gerek yoktur. – Joes

13

Büyük olasılıkla bir alt sınıf aracılığıyla şişesi-yönetici için bazı ek seçenekler belirtmek gerekir:

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'leri görüntülemek için bir yol arıyordum, mükemmel! – Adversus