2015-08-01 7 views
5

मैं नीचे दिखाए गए मॉडल मैट्रिलिन मॉडल के लिए एक बनाएँ/संपादित फ़ॉर्म बनाने के लिए फ्लास्क-एडमिन का उपयोग करने का प्रयास कर रहा हूं। यह मॉडल एक स्ट्रिंग क्षेत्र नाम है और एक क्षेत्र एक और मॉडल Pod है, जो अपने आप में एक कबीले मॉडल के लिए एक विदेशी कुंजी क्षेत्र है के लिए एक विदेशी कुंजी बाधा के साथ pod_id।कुछ चुनिंदा फ़ील्ड विकल्पों के साथ कस्टम फ्लास्क-एडमिन फॉर्म किसी अन्य चयन क्षेत्र के अनुसार सेट

कुप्पी के व्यवस्थापक द्वारा बनाई डिफ़ॉल्ट रूप

नाम क्षेत्र और Pod उदाहरण के लिए कुछ चुने हुए क्षेत्र से पता चलता है, लेकिन मैं एक क्षेत्र कबीले जोड़ने के लिए है, जो Pod अनुसार सूची रीसेट हो जाएंगे चाहते हैं कबीले उदाहरण के लिए चुना।

matriline के लिए कबीले क्षेत्र मैं डिफ़ॉल्ट ModelView ओवरराइड जोड़ सकते हैं और नीचे के रूप में देखने के MatrilineView में दिखाया गया है सभी कबीले उदाहरणों के साथ एक अतिरिक्त का चयन क्षेत्र कबीले जोड़ने के लिए, करने के लिए।

अब मैं फली की सूची हर बार एक नई कबीले चयन किया जाता है पुनर्स्थापित करने के लिए प्रदान की गई फार्म के लिए कुछ अजाक्स कोड जोड़ने की जरूरत।

मैं अजाक्स कोड सहित एक कस्टम द्वारा पूरी तरह से डिफ़ॉल्ट रूप को बदलने के लिए है? या वहां कुप्पी के व्यवस्थापक के साथ है कि करने के लिए कोई आसान तरीका है?

<b>models.py</b> 

... 

class Matriline(db.Model): 
    __tablename__ = 'matriline' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.Unicode(64)) 
    pod_id = db.Column(db.Integer, db.ForeignKey('pod.id')) 

    def __unicode__(self): 
     return self.name 


class Pod(db.Model): 
    __tablename__ = 'pod' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.Unicode(64)) 
    matrilines = db.relationship('Matriline', backref='pod', lazy='select') 
    clan_id = db.Column(db.Integer, db.ForeignKey('clan.id')) 

    def __unicode__(self): 
     return self.name 


class Clan(db.Model): 
    __tablename__ = 'clan' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.Unicode(64)) 
    pods = db.relationship('Pod', backref='clan', lazy='select') 

    def __unicode__(self): 
     return self.name 

... 

<b>views.py</b> 

from flask_admin.contrib import sqla 
from wtforms import SelectField 
from orcall import models 


class MatrilineView(sqla.ModelView): 
    column_hide_backrefs = False 
    form_extra_fields = { 
     'clan': SelectField('Clan', 
      choices=[ (c.id, c.name) for c in models.Clan.query.all()]) 
    } 
    column_list = ('name', 'pod', 'clan') 

... 

उत्तर

4

आप एक QuerySelectField उपयोग करने की आवश्यकता है। उदाहरण के लिए:

from flask.ext.admin.form import Select2Widget 

class MatrilineView(sqla.ModelView): 
    column_hide_backrefs = False 
    form_extra_fields = { 
     'clan': sqla.fields.QuerySelectField(
      label='Clan', 
      query_factory=lambda: Clan.query.all, 
      widget=Select2Widget() 
     ) 
    } 
    column_list = ('name', 'pod', 'clan') 
+0

Clan.query.all Clan.query.all() को फ्लास्क-व्यवस्थापक 1.4.0 पर काम करने के लिए होना चाहिए –

संबंधित मुद्दे

 संबंधित मुद्दे