微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在flask-admin中呈现给用户的编辑表单之前,如何访问模型字段值?

如何解决在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 举报,一经查实,本站将立刻删除。