Изменить расположение ссылки кнопки «Создать» - PullRequest
0 голосов
/ 12 мая 2018

У меня есть этот интерфейс администратора фляги, но я хочу изменить поведение ссылки Create, чтобы я мог ссылаться на свой собственный интерфейс создания вместо того, чтобы позволить администратору фляги создавать форму для меня.Также будет работать добавление еще одной ссылки рядом с With Selected, которая перенаправляет на другую страницу.Это сложные геометрические данные, поэтому мне нужен совершенно другой интерфейс для создания данных, Products - просто пример.

enter image description here

Я бы действительно предпочел не делать этогодобавьте еще один шаблон администратора, так что было бы неплохо, если бы это можно было сделать на 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))

Как вы, наверное, уже заметили, это действительно глупо, и я бы предпочел найти лучшее решение.

Есть предложения?

1 Ответ

0 голосов
/ 13 мая 2018

Переопределить create_view метод ProductView.

class ProductView(ModelView):
    column_display_pk = True

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