更改 link "create" 按钮的位置 flask-admin

Change link location of "create" button flask-admin

我有这个 flask 管理界面,但是我想改变 Create link 的行为,所以我可以 link 到我自己的创建界面而不是让 flask 管理为我制作一个创建表格。还可以在 With Selected 旁边添加另一个 link,重定向到另一个页面。这是复杂的几何数据,所以我需要一个完全不同的数据创建界面,Products只是一个例子。

我真的不想添加另一个管理模板,所以如果可以在 python 中完成就好了。

经过一段时间的尝试,我找到了这个解决方案,它完全符合我的要求:

from flask_admin import Admin
from flask_sqlalchemy import SQLAlchemy
from flask_admin.contrib.sqla import ModelView
from flask import Flask, url_for, redirect

app = Flask(__name__)
db = SQLAlchemy(app)
admin = Admin(app)

class Product(db.Model):
    __tablename__ = 'product'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)

db.create_all()

class SuperHackyFlaskAdminRedirectFakeException(Exception):
    pass

@app.errorhandler(SuperHackyFlaskAdminRedirectFakeException)
def handle_fake_errors(error):
    return redirect(url_for('index'))

@app.route('/index')
def index():
    return 'this is the index'

class ProductView(ModelView):
    column_display_pk = True

    def redirect_to_index_from_admin(_):
        raise SuperHackyFlaskAdminRedirectFakeException()

    create_form = redirect_to_index_from_admin

admin.add_view(ProductView(Product, db.session))

如您所见,它确实很老套,我希望找到更好的解决方案。

有什么建议吗?

覆盖 ProductViewcreate_view 方法。

class ProductView(ModelView):
    column_display_pk = True

    @expose('/new/', methods=('GET', 'POST'))
    def create_view(self):
        # render your view here
        return "Hello World"