如何在列表视图中设置额外字段的值?
How to set the value of an extra field in the list view?
我在 class Matriline
的 ModelView
中添加了一个额外的字段 clan
并将其添加到列表视图中的列中,如下所示。
如何在列表视图中设置额外字段 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
根据 BaseModelView.index_view 中的代码,没有 "configuration" 选项。您将需要覆盖 MatrilineAdmin
-class.
中的 get_list
方法
这看起来像:
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 从母系到氏族,并直接在模型中定义氏族 属性 class:
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')
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)
适合我。
我在 class Matriline
的 ModelView
中添加了一个额外的字段 clan
并将其添加到列表视图中的列中,如下所示。
如何在列表视图中设置额外字段 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
根据 BaseModelView.index_view 中的代码,没有 "configuration" 选项。您将需要覆盖 MatrilineAdmin
-class.
get_list
方法
这看起来像:
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 从母系到氏族,并直接在模型中定义氏族 属性 class:
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')
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)
适合我。