如何解决在flask-admin中呈现给用户的编辑表单之前,如何访问模型字段值?
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
username = db.Column(db.String(50),unique=True,nullable=False)
token_life_time = db.Column(db.Integer,nullable=False)
以及从flask-admin获得的ModelView:
class usermodelView(ModelView):
column_list = ('id','username','token_life_time')
form_create_rules = ('username','token_life_span') # custom field,that doesn't exist in actual model
form_edit_rules = ('username','token_life_time','new_token_life_time')
form_extra_fields = {
'token_life_span': StringField(default='1-0-0-0',validators=[Datarequired()]),'new_token_life_time': StringField() # how to put here actual value from model.token_life_time as default value in EDIT form ???
}
column_formatters = dict(
token_life_time=lambda v,c,m,p: usermodelView.convert_seconds_to_human_readable(m.token_life_time)
)
def on_model_change(self,form,model,is_created):
token_time = form.data.get('token_life_span',None)
if token_time:
model.token_life_time = self.convert_to_seconds(token_time) # my custom function that converts string of format (days-hours-minutes-seconds,example: 1-8-23-15) into seconds for storing in DB int type
我想在呈现给用户的EDIT表单之前访问 model.token_life_time 值,并将其从秒转换为人类可读的字符串(包括天,小时等)。然后将转换后的值作为默认值以编辑形式( new_token_life_time )放入自定义字段。
问题是-如何从模型访问实际值,然后将转换后的值作为默认值以EDIT形式放在自定义字段中?
解决方法
覆盖视图的edit_form
方法-请参见documentation。
类似以下内容:
class UserModelView(ModelView):
def edit_form(self,obj=None):
form = super().edit_form(obj=obj)
# calculate token_life_span
_token_life_span = get_token_life_span(obj.token_life_time)
form.token_life_span.data = _token_life_span
return form
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。