2015-08-04 1 views
0

Я добавил дополнительное поле clan в ModelView класса Matriline и добавьте его в столбцы в виде списка, как показано ниже.Как установить значение дополнительного поля в виде списка?

Как установить значение дополнительного поля clan в виде списка?

views.py

class MatrilineAdmin(sqla.ModelView): 

    form_extra_fields = { 
     'clan': SelectField('Clan', 
      coerce=int, 
      choices=[ (c.id, c.name) for c in Clan.query.all()]) 
    } 
    create_template = 'admin/create.html' 
    edit_template = 'admin/edit.html' 
    column_list = ('name', 'pod', 'clan') 

models.py

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

    def __unicode__(self): 
     return self.name 

    def __str__(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 
    def __str__(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 

ответ

0

Согласно кодексу в BaseModelView.index_view нет опции "конфигурация" для этого. Вам необходимо переопределить метод get_list в вашем классе MatrilineAdmin.

Это будет выглядеть примерно так:

class MadrilineAdmin(sqla.ModelView): 
    def get_list(self, *args, **kwargs): 
     count, data = super().get_list(*args, **kwargs) 
     for d in data: 
      d.clan = 'whatever you want' 
     return count, data 

Вы могли бы также попытаться определить relationship от Matriline клану и определить свойство клановой непосредственно в классе модели:

class Matriline(db.Model): 
    # … 
    pod = db.relationship('Pod') 

    @property 
    def clan(self): 
     if not self.pod: 
      return None 
     return self.pod.clan 

class Pod(db.Model): 
    # … 
    clan = db.relationship('Clan') 
0
class ExampleDatabase(sqla.ModelView): 

    def _list_name(self, context, model, name): 
     return 'something you like' 

    column_formatters = { 
     'example': _list_name 
    } 

    def get_column_names(self, only_columns, excluded_columns): 
     only_columns.append('example') 
     return super().get_column_names(only_columns, excluded_columns) 

Работы для меня.