如何在列表视图中设置额外字段的值?

时间:2015-08-04 06:03:43

标签: flask flask-admin

我在课程clan的{​​{1}}添加了一个额外的字段ModelView,并将其添加到列表视图中的列中,如下所示。

如何在列表视图中设置额外字段Matriline的值?

views.py

clan

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

2 个答案:

答案 0 :(得分:1)

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)

适合我。

答案 1 :(得分: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

你也可以尝试从Matriline到Clan指定relationship并直接在模型类中定义clan属性:

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