标签: flask-admin

Flask-Admin ModelView中的只读文本字段

如何在ModelViewreadonly 上创建一个字段?

class MyModelView(BaseModelView):
    column_list = ('name', 'last_name', 'email')
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy flask-admin

11
推荐指数
5
解决办法
7976
查看次数

从编辑视图自定义(覆盖)Flask-Admin的Submit方法

前提条件:
我是Python新手,特别是Flask-Admin.我创建了一个简单的测试服务,它有MondoDB,保持数据的"一对一"关系.

employeeName - >薪水

该模型看起来像这样:

class Employee(db.Document):
    fullName = db.StringField(max_length=160, unique=True)
    salary = db.IntField()
Run Code Online (Sandbox Code Playgroud)

我使用Flask-Admin来查看包含数据的表并进行编辑.当我想更改'salary'字段时,我只需按下'edit'按钮,在Flask-Admin的默认编辑视图中我更改整数值.我按"提交"并成功应用数据库中的新值.

问题:
但是我需要以这种方式覆盖Submit方法,因为它是功能并添加了一些自定义代码.就像我们假设我想在实际数据库提交后在日志文件中添加注释:

logging.warning('%s的工资:已更改为/%s',fullName,salary)

任何关于如何实现这一点的建议都将受到高度赞赏.也许你可以指导我走的路,因为Flask-Admin文档到目前为止还没有给我足够的帮助.

python flask flask-admin

11
推荐指数
1
解决办法
7045
查看次数

将flask-admin添加到项目时错误的仪表板

在此输入图像描述

我正在尝试扩展基于烧瓶的项目https://github.com/hack4impact/flask-base/tree/master/app.这使用app/init.py和蓝图中的应用程序工厂模式.

在app/init.py我有:

import os
from flask import Flask
from flask_mail import Mail
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from flask_assets import Environment
from flask_wtf import CsrfProtect
from flask_compress import Compress
from flask_rq import RQ
from flask_admin import Admin, BaseView, expose
from flask_admin.contrib.sqla import ModelView
# from app.models import User


from config import config
from .assets import app_css, app_js, vendor_css, vendor_js




basedir = os.path.abspath(os.path.dirname(__file__))

mail = Mail()
db = SQLAlchemy()
csrf = CsrfProtect()
compress = Compress()


# …
Run Code Online (Sandbox Code Playgroud)

python flask flask-admin

11
推荐指数
1
解决办法
1343
查看次数

烧瓶管理员记住表格值

在我的应用程序中,我将“用户”和“帖子”作为模型。每个帖子都有一个用户名外键。当我在帖子模型的顶部创建ModelView时,可以在管理界面中以特定用户的身份创建帖子,如以下屏幕截图所示

在此处输入图片说明

添加帖子并单击“保存并添加另一个”后,“用户”将恢复为“ user1”。如何使表单记住先前的值“ user2”?

我的研究使我相信可以通过修改on_model_change和on_form_prefill并在flask会话中保存先前的值来完成,但这似乎过度设计了这么简单的任务。必须有一个更简单的方法。

我的代码可以在下面看到

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import flask_admin
from flask_admin.contrib import sqla

app = Flask(__name__)

db = SQLAlchemy()

admin = flask_admin.Admin(name='Test')


class Users(db.Model):
    """
    Contains users of the database
    """
    user_id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True, nullable=False)

    def __str__(self):
        return self.username


class Posts(db.Model):
    """
    Contains users of the database
    """
    post_id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(11), db.ForeignKey(Users.username), nullable=False)
    post = db.Column(db.String(256))
    user = db.relation(Users, backref='user')


def build_sample_db():
    db.drop_all() …
Run Code Online (Sandbox Code Playgroud)

python flask flask-admin

11
推荐指数
1
解决办法
336
查看次数

flask-admin形式:根据字段1的值限制字段2的值

我一直努力在flask-admin中实现的一个功能是当用户编辑表单时,一旦设置了字段1就限制字段2的值.

让我用文字举一个简化的例子(实际的用例更复杂).然后我将展示实现该示例的完整要点,减去"约束"功能.

假设我们有一个数据库,可以跟踪一些软件"配方",以各种格式输出报告.在recipe我们的样本数据库的表中有两个配方:"严重的报告","ASCII艺术".

为了实现每个配方,我们从几种方法中选择一种.method我们数据库的表有两个方法:"tabulate_results","pretty_print".

每种方法都有参数.该methodarg表有两个参数名称"tabulate_results"("rows","display_total")和两个参数"pretty_print"("embellishment_character","lines_to_jump").

现在,对于每个配方("严肃报告","ASCII艺术"),我们需要提供各自方法的参数值("tabulate_results","pretty_print").

对于每个记录,该recipearg表允许我们选择一个配方(即字段1,例如"严重报告")和参数名称(即字段2).问题是显示了所有可能的参数名称,而它们需要根据字段1的值进行约束.

我们可以实现哪些过滤/约束机制,一旦我们选择"严重报告",我们知道我们将使用"tabulate_results"方法,因此只有"rows"和"display_total"参数可用?

我正在考虑一些AJAX巫术,它检查Field 1并为Field 2值设置查询,但不知道如何继续.

您可以通过使用要点来看到这一点:单击Recipe Arg选项卡.在第一行("严重报告")中,如果您尝试通过单击来编辑"Methodarg"值,则所有四个参数名称都可用,而不是仅两个.

# full gist: please run this

from flask import Flask
from flask_admin import Admin
from flask_admin.contrib import sqla
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship

# Create application
app = Flask(__name__)

# Create dummy secrey key so we can use sessions
app.config['SECRET_KEY'] = '123456790'

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///a_sample_database.sqlite'
app.config['SQLALCHEMY_ECHO'] = …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask flask-sqlalchemy flask-admin

10
推荐指数
1
解决办法
2050
查看次数

Flask-Admin&Authentication:"/ admin"受保护,但"/ admin/anything-else"不受保护

我正在尝试使用Flask和Flask-SuperAdmin自定义管理员视图,但是,索引视图和子视图显然没有使用相同的is_accessible方法:

编辑:我设法弄清楚我做错了什么.我需要在每个视图类中定义is_accessible.这是使用mixin-class完成的,如固定代码所示:

app/frontend/admin.py(固定和工作代码)

from flask.ext.security import current_user, login_required
from flask.ext.superadmin import expose, AdminIndexView
from flask.ext.superadmin.model.base import ModelAdmin
from ..core import db

# all admin views should subclass AuthMixin
class AuthMixin(object):
    def is_accessible(self):
        if current_user.is_authenticated() and current_user.has_role('Admin'):
            return True
        return False

# the view that gets used for the admin home page
class AdminIndex(AuthMixin, AdminIndexView):
    # use a custom template for the admin home page
    @expose('/')
    def index(self):
        return self.render('admin/index.jade')

# base view for all other …
Run Code Online (Sandbox Code Playgroud)

python flask flask-login flask-security flask-admin

9
推荐指数
1
解决办法
4083
查看次数

如何在Flask/SQLAlchemy中显示包含多对多查询结果的列

我正在尝试通过构建一个简单的Wiki(很大程度上基于Flask-Admin示例)来学习Python/Flask/SQLAlchemy,但我正在努力理解如何从我的多对多关系中获取一个新列来显示.

我已经成功创建了Wiki并为标签创建了一个多对多的关系表而没有任何问题(并且标签在我看到的情况下正常工作),但是我想将标签显示为列而无法获取逻辑成功了.

目标:我想显示一个列,显示多对多关联表引用的标记.

这是我想要完成的图片:

包含名为Tag(s)的列的表,其中包含两行. 第1行包含文本

以下是我认为的相关代码:

wiki_tags_table = db.Table('wiki_tags', db.Model.metadata,
                           db.Column('wiki_id', db.Integer, db.ForeignKey('wiki.id')),
                           db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'))
                           )

class Wiki(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), unique=True)
    description = db.Column(db.Text)
    path = db.Column(db.Unicode(256))
    date_added = db.Column(db.DateTime)
    tags_id = db.Column(db.Integer, db.ForeignKey('tag.id'))
    tags = db.relationship('Tag', secondary=wiki_tags_table, backref=db.backref('wiki_tags_table', lazy='dynamic'))

    def __unicode__(self):
        return self.item

class WikiAdmin(sqla.ModelView):

    column_exclude_list = ['path']

    column_hide_backrefs = False

    form_overrides = {
        'path': form.FileUploadField
    }

    form_args = {
        'path': {
            'label': 'File',
            'base_path': file_path
        }
    }

    column_searchable_list = ('title', …
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy flask-admin

9
推荐指数
1
解决办法
2228
查看次数

Flask-Admin vs Flask-AppBuilder

我是Flask的新手,并注意到有两个插件可以启用CRUD视图和授权登录,Flask-AdminFlask-AppBuilder.

这两个特性让我感兴趣的是我的模型的Master-Detail视图,我可以在同一个屏幕上看到主表的行和相关的详细信息.

知道哪一个更喜欢?我看到Flask-AppBuilder在Github上有更多的提交,而Flask-Admin有更多的明星.

如何分辨,不花太多时间选错?

python flask flask-admin

9
推荐指数
1
解决办法
5561
查看次数

flask admin自定义QueryAjaxModelLoader

据我所知,Flask Admin支持AJAX用于外键模型加载.该瓶管理员-模型文档覆盖标题下的基本知识form_ajax_refs.我已成功地在很多场合成功使用它,但是我希望实现自定义级别的问题.让我详细说明一下.

我有一个Product模型,一个Organisation模型和一个连接表来关联它们,定义如下:

class Product(Base):
    __tablename__ = "products"

    product_uuid = Column(UUID(as_uuid=True), primary_key=True)
    title = Column(String, nullable=False)
    description = Column(String, nullable=False)
    last_seen = Column(DateTime(timezone=True), nullable=False, index=True)
    price = Column(Numeric(precision=7, scale=2), nullable=False, index=True)

class Organisation(Base):
    __tablename__ = "organisations"
    org_id = Column(String, primary_key=True)
    org_name = Column(String, nullable=False)
    products = relationship(
        Product,
        secondary="organisation_products",
        backref="organisations"
    )

organisation_products_table = Table(
    "organisation_products",
    Base.metadata,
    Column("org_id", String, ForeignKey("organisations.org_id"), nullable=False),
    Column("product_uuid", UUID(as_uuid=True), ForeignKey("products.product_uuid"), nullable=False),
    UniqueConstraint("org_id", "product_uuid"),
    )
Run Code Online (Sandbox Code Playgroud)

在名为模型的Flask管理模型视图中,该模型CuratedList具有模型的外键约束Product,我 …

python sqlalchemy flask flask-admin

9
推荐指数
1
解决办法
3225
查看次数

如何自定义Flask Admin模板?

我正在尝试RTL烧瓶管理模板,我知道我可以覆盖现有模板,但是如何只更改CSS?有任何想法吗?

flask flask-admin

9
推荐指数
1
解决办法
4776
查看次数