簡體   English   中英

在Flask Admin中過濾下拉菜單

[英]Filtering the Drop Downs in Flask Admin Before it Gets to the User

我正在為各種公司實現一個接口,以使用同一Flask Admin實例向其各種用戶添加角色並為其分配角色。 但是,我希望這樣做,以便僅屬於查看數據的公司的用戶會出現在代表角色和用戶之間一對多關系的下拉列表中。

是否有類似get_query東西,但下拉列表值呢?

這是我目前的看法

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
        )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM