将不同的查询应用于烧瓶管理编辑表单
Apply different query to flask admin edit form
我有两个管理面板,它们的行为都与两个不同的 Flask 管理实例不同。对于第二个管理面板,我试图限制 select 可用数据。因此,例如,如果我有用户和角色,在角色编辑表单中,我可以 select 默认情况下存在于数据库中的所有用户。我想覆盖此查询以仅显示满足此条件的数据,以便使用第二个管理面板的用户只能 select/edit 来自给定数据。
我已经尝试了几种可用的解决方案,但似乎没有任何效果,而是表单本身正确但未插入数据。
下面是我的代码片段
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
的class
谢谢
好的,我找到了解决方案。
根据How can I filter a column in the edit form with Flask-Admin ModelView?,刘老师的回答
您不需要覆盖 edit_form,您只需将不同的查询过滤器分配给 'roles' 字段,方法是将 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)
)
我有两个管理面板,它们的行为都与两个不同的 Flask 管理实例不同。对于第二个管理面板,我试图限制 select 可用数据。因此,例如,如果我有用户和角色,在角色编辑表单中,我可以 select 默认情况下存在于数据库中的所有用户。我想覆盖此查询以仅显示满足此条件的数据,以便使用第二个管理面板的用户只能 select/edit 来自给定数据。
我已经尝试了几种可用的解决方案,但似乎没有任何效果,而是表单本身正确但未插入数据。
下面是我的代码片段
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
的class谢谢
好的,我找到了解决方案。
根据How can I filter a column in the edit form with Flask-Admin ModelView?,刘老师的回答
您不需要覆盖 edit_form,您只需将不同的查询过滤器分配给 'roles' 字段,方法是将 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)
)