簡體   English   中英

如何使用Flask-admin按ID分隔視圖模型?

[英]How to separate views model by id with Flask-admin?

我就與支付學費的應用程序和使用瓶管理員數據庫管理每一個誰與我的應用程序注冊的學校。

我已經做到了,但是現在我真的不確定如何在已注冊管理自己的學費的每個學校帳戶之間分隔數據訪問。

使用Flask-login ,我可以使用以下代碼:

@app.route('/school_admin')
@login_required
def school_admin():
    school_data = db.session.query(Student.id, Student.name).filter_by(school_id=current_user.id).all()
    return render_template('school_admin_dashboard.html', school_data=school_data)

但是,由於Flask-admin自動生成了表格視圖,因此我真的不確定如何執行此操作。

到目前為止,我已經將ModelView設置為

class SchoolAdminModelView(sqla.ModelView):
    def is_accessible(self):
        if not current_user.is_active or not current_user.is_authenticated:
            return False
        if current_user.has_role('schooladmin'):
            return True

        return False

    def _handle_view(self, name, **kwargs):
        if not self.is_accessible():
            if current_user.is_authenticated:
                # permission denied
                abort(403)
            else:
                # login
                return redirect(url_for('security.login', next=request.url))

class StudentModelView(SchoolAdminModelView):
    pass

admin.add_view(StudentModelView(Student, db.session))

那么,如何通過school_id ..分隔視圖模型?

注意:我之所以使用Flask-admin而不是Flask-login作為學校管理員,是因為它非常容易管理用戶超級用戶角色。 我已經使用Flask-login作為使用此應用程序的用戶的學生家長。

假設已登錄的用戶具有一個連接到他們的school_id

class SchoolAdminModelView(sqla.ModelView):
    def get_query(self):
        return super(SchoolAdminModelView, self).get_query().filter(School.id == current_user.school_id)

它過濾用於生成表中項目列表的查詢。 您可能需要根據實際需要對其進行一些調整。

您的代碼幾乎可以使用@Joost,但是我在其中添加了一些方法。

我在這里找到了解決方案並對其進行了一些修改,這是代碼如何使用這種方式來分隔不同學校之間的數據訪問:

class StudentModelView(sqla.ModelView):
    def get_query(self):
        return Student.query.filter_by(school_id=current_user.id)

    def get_count_query(self):
        return self.session.query(func.count('*')).select_from(self.model).filter(
            Student.school_id == current_user.id
        )

暫無
暫無

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

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