gpt4 book ai didi

python - 在到达用户之前过滤 Flask Admin 中的下拉菜单

转载 作者:行者123 更新时间:2023-12-04 00:11:06 25 4
gpt4 key购买 nike

我正在为不同的公司实现一个接口(interface),以使用相同的 Flask Admin 实例来为他们的不同用户添加和分配角色。但是,我希望只有属于查看数据的公司的用户才会出现在代表角色和用户之间一对多关系的下拉列表中。

是否有类似 get_query 的东西,但用于下拉值?

这是我当前的 View 代码

class RoleView(ModelView):
def get_query(self):
return super(RoleView, self).get_query().filter(
Role.company_id == current_user.company.id
)

def get_count_query(self):
return super(RoleView, self).get_count_query().filter(
Role.company_id == current_user.company.id
)

和模型

class Role(db.Model):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(80), unique=True)
description = db.Column(db.String(255))

users = db.relationship(
'User',
backref="role",
lazy="dynamic"
)
company_id = db.Column(
db.Integer,
db.ForeignKey('company.id'),
nullable=False
)

谢谢

最佳答案

在深入研究源代码后,我发现了这条有趣的线,它让我找到了正确答案 https://github.com/flask-admin/flask-admin/blob/0f9f4b8695e3a7d00d9f3bae5fbf8f47f6a24e55/flask_admin/contrib/sqla/form.py#L81

QuerySelectMultipleField 表单域有一个名为 query_factory 的域,它接受一个函数。所以我们可以用 form_argslambda 覆盖它:

class RoleView(ModelView):
column_exclude_list = ['company']
form_excluded_columns = ['company']

form_args = {
'users': {
'query_factory': lambda: User.query.filter_by(
company_id=current_user.company_id
)
}
}

def get_query(self):
return super(RoleView, self).get_query().filter(
Role.company_id == current_user.company.id
)

def get_count_query(self):
return super(RoleView, self).get_count_query().filter(
Role.company_id == current_user.company.id
)

关于python - 在到达用户之前过滤 Flask Admin 中的下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35139397/

25 4 0