对烧瓶管理编辑表单应用不同的查询

时间:2017-06-23 19:21:42

标签: python flask flask-admin

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

我已经尝试了几种可用的解决方案,但似乎没有任何工作,相反,表单本身是正确的,但数据没有被插入。

以下是我的代码段

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方法不会将更改应用到数据库中。

辅助功能是继承sqla.ModelView

的类

由于

1 个答案:

答案 0 :(得分:2)

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

基于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)
        )