【问题标题】:Apply different query to flask admin edit form将不同的查询应用于烧瓶管理员编辑表单
【发布时间】:2017-06-23 19:21:41
【问题描述】:

我有两个管理面板,它们的行为与两个不同的烧瓶管理实例不同。对于第二个管理面板,我正在尝试限制可选数据。例如,如果我有用户和角色,在角色编辑表单中,我可以默认选择数据库中存在的所有用户。我想覆盖此查询,只显示符合此条件的数据,以便使用第二个管理面板的用户只能从给定数据中选择/编辑。

我尝试了几种可用的解决方案,但似乎没有任何效果,而是表单本身正确但没有插入数据。

下面是我的代码sn-p

def filtering_function():
   return User.query.join(roles_users).join(Role).filter(User.company == current_user.company)

class CustomModelForm(FlaskForm):
    Users = QuerySelectField(query_factory=filtering_function)
class SiteRoleView(Accessibility):

    def edit_form(self, obj):
        return CustomModelForm(obj=obj)

    def get_query(self):
        return self.session.query(self.model).join(roles_users).join(User).filter(User.company == current_user.company)

上面的 get_query 方法在管理面板中为列表视图带来过滤查询,但是,它不会影响编辑表单视图中的数据,并且像上面这样覆盖 edit_form 方法不会将更改应用到数据库中。

Accessibility是继承sqla.ModelView的类

谢谢

【问题讨论】:

    标签: python flask flask-admin


    【解决方案1】:

    好的,我找到了解决方案。

    基于How can I filter a column in the edit form with Flask-Admin ModelView?,刘的回答。

    您不需要覆盖 edit_form,您只需将不同的查询过滤器应用到“角色”字段,方法是将 form_args 分配到您的特定视图中。

    下面是狙击手

    def filtering_function():
       return Role.query.join(roles_users).join(User).filter(User.company == current_user.company)
    
    class SiteUserView:
        form_args = dict(
            roles = dict(label='Roles', query_factory=filtering_function)
            )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 2014-04-23
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多