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

Flask管理员可编辑的基于选择列的基于行的过滤器

如何解决Flask管理员可编辑的基于选择列的基于行的过滤器

我正在使用flask-admin对我的数据库模型进行轻松的编辑。这是关于将滑雪板出租给客户的。

这是我的租借视图(因此是sql_alchemy DB模型):

class RentalView(ModelView):
    column_list = ("customer","from_date","to_date","ski","remarks")
    ...

customer和ski是各自模型的关系字段。我只想在此时间段内未由其他人租用的滑雪板上显示这些滑雪板。

我一直在到处搜索如何动​​态设置编辑表单的选择,但是它不能完全起作用。

我尝试做

def on_form_prefill(self,form,id):
    query = db.session.query... # do the query based on the rental "id"
    form.ski.query = query

,并且可以正确显示过滤的查询。但是,在提交表单时,QuerySelectField .query的{​​{1}}属性再次为ski,因此导致None错误。不知道为什么要重置查询?!

有人知道基于已编辑对象的ID来处理动态查询的另一种策略吗?

解决方法

使用此模式,覆盖视图的edit_form方法,实例默认编辑表单(通过调用super()方法,然后根据需要修改表单:

class RentalView(ModelView):

    # setup edit forms so that Ski relationship is filtered
    def edit_form(self,obj):

        # obj is the rental instance being edited
        _edit_form = super(RentalView,self).edit_form(obj)

        # setup your dynamic query here based on obj.id
        # for example

        _edit_form.ski.query_factory = lambda: Ski.query.filter(Ski.rental_id == obj.id).all()

        return _edit_form

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。