好吧,我最近接触了flask-admin,但我不知道如何解决这个问题。我知道我可以form_choices通过指定元组列表来限制文本字段的可能值。无论如何,form_choices允许一次只选择一个值。如何指定在某些情况下我可能需要以逗号分隔的值列表?
我试过这个解决方法:
form_args = {
'FIELD': {
'render_kw': {"multiple": "multiple"},
}
}
Run Code Online (Sandbox Code Playgroud)
但是,即使网页上实际出现了多选输入,也只会保存第一个值。
EIDT 05/13/2017
通过使用flask-admin,我为我的问题找到了两种可能的(部分)解决方案,它们都有特定的缺点。
1)第一个处理使用 Select2TagsField
from flask_admin.form.fields import Select2TagsField
...
form_extra_fields = {
'muri': Select2TagsField()
}
Run Code Online (Sandbox Code Playgroud)
使用此方法可以轻松实现普通输入文本的选择菜单,即使目前我不明白如何将选项传递给 Select2TagsField。它可以很好地作为一种多自由文本输入。但是,据我所知,不可能配对 Select2TagsField 和 form_choices
2)第二个有点长,但它提供了对代码的更多控制(至少我认为)。仍然暗示使用form_choices,但这次与on_model_change
form_args = {
'FIELD': {
'render_kw': {"multiple": "multiple"},
}
}
form_choices = {'FIELD': [
('1', 'M1'), ('2', 'M2'), ('3', 'M3'), ('4', 'M4')
]}
...
def on_model_change(self, form, model, is_created):
if len(form.FIELD.raw_data) > 1:
model.FIELD = ','.join(form.FIELD.raw_data)
Run Code Online (Sandbox Code Playgroud)
尽管是前一种,但该解决方案允许映射选择并且在将数据添加到模型时运行良好,但在编辑时会出现一些问题。每当我打开编辑对话框时,FIELD 都是空的。如果我查看发送到表单的数据( …
我正在将烧瓶管理员添加到预先存在的烧瓶样板项目中。我已经能够在https://github.com/kc1/flask-base (SCREENSHOT) 上运行基本项目。我现在需要添加模型视图来添加基本的 CRUD 功能。为此,我将代码更改为:
adm = Admin(app,name='flaskadmin')
from app.models import User
adm.add_view(ModelView(User, db.session))
Run Code Online (Sandbox Code Playgroud)
你可以看到它有效。但是如果我在 app/init 顶部导入 User 模型和其余的导入,我会得到:
Traceback (most recent call last):
File "...flask-base/manage.py", line 10, in <module>
from app import create_app, db
File "E:\ENVS\r3\flask-base\app\__init__.py", line 17, in <module>
from app.models import User
File "E:\ENVS\r3\flask-base\app\models\__init__.py", line 6, in <module>
from .user import * # noqa
File "E:\ENVS\r3\flask-base\app\models\user.py", line 7, in <module>
from .. import db, login_manager
ImportError: cannot import name 'db'
Run Code Online (Sandbox Code Playgroud)
为什么?
我的 SQLAlchemy 数据库中有三个表(使用 Flask SQLAlchemy):产品、产品变体和订单。我想在订单中查看包含哪些产品及其变体。
它适用于关系/外键,但主要问题是:如果我将产品添加到订单中,我仍然可以添加其他产品的变体(使用 Flask-Admin,或仅使用 Flask shell)。
所以,主要问题是:如何在表之间创建连接,以便只有当它们是订单产品的变体时才能添加变体?谢谢 :)
另一个解决方案:如何将列添加到 Orders 表,以便根据变体 ID 从 Product 表中获取产品名称?我尝试使用column_property, Post.query.get(variation_id), variation.parent_id, backhrefvariation.origin_product但没有任何成功:)
我的模型:
产品(如三星 Galaxy 7)
class Product(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(120), index=True)
brand = db.Column(db.String(120))
variations = db.relationship('Variation', backref='origin_product', lazy='dynamic')
orders = db.relationship('Order', backref='product_in_order', lazy='dynamic')
Run Code Online (Sandbox Code Playgroud)
产品变化(如三星 Galaxy 7 Blue 32GB)
class Variation(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(120), index=True)
price = db.Column(db.Integer)
product_id = db.Column(db.Integer, db.ForeignKey('product.id')) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用flask-admin,这看起来非常简单,但我有一个问题.
我在集合中有一个字段,定义为a ListField(),具有None列表字段类型的隐式类型.我没有为该字段定义类型的原因是因为我保留了一个列表列表,并且没有其他优雅的方式(我发现)用mongoengine来实现这一点.
但是flask-admin不会让我定义这样一个字段,错误是ListField "movements" must have field specified for model.
有没有解决的办法?
我在将与其他人的关系的表格导出到 csv 时遇到问题,而在“简单”中运行良好。我必须添加一些导出的基础吗?例如,这是 db.Model:
class Categoria(db.Model):
__tablename__ = 'categorie'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
categoria = db.Column(db.String(30), primary_key=True)
tipo_id = db.Column(db.Integer, db.ForeignKey('tipi.id'), primary_key=True)
tipo = db.relationship('Tipo', backref='categorie')
Run Code Online (Sandbox Code Playgroud)
这是 ModelView
class CategorieAdmin(sqla.ModelView):
column_display_pk = True
can_export = True
export_types = ['xls']
list_columns = ['categoria', 'tipo']
Run Code Online (Sandbox Code Playgroud)
错误生成是: Exception: Unexpected data type <class '__main__.Tipo'>
感谢帮助
我已经有一个使用我的 SQLAlchemy 模型的应用程序,我现在正在尝试在顶部添加一个 Flask 管理网站来管理数据库中的一些数据。这个模型已经在整个现有应用程序中设置和工作,所以我知道关系配置正确。在我的数据库中,data_package 表对供应商表有一个 FK,这已作为关系添加。但是,当我创建一个烧瓶模型视图以允许编辑 data_package 时,我收到了错误:
例外:找不到模型的反向关系
我添加了下面代码的一个子集,还有更多的列和逻辑,但这是我必须尝试和测试问题修复程序的最低限度。问题发生是因为我添加了inline_models = (Supplier, )这是我需要的,因为我想选择允许更改数据包的供应商。
抛出异常的代码行是https://github.com/flask-admin/flask-admin/blob/master/flask_admin/contrib/sqla/form.py#L558。这样做的原因是关系方向被定义为 ONETOMANY,并且有一个检查以确保方向是 MANYTOONE 或 MANYTOMANY
Base = declarative_base()
class Supplier(Base):
__tablename__ = 'supplier'
id = Column(Integer, primary_key=True)
name = Column(String(100), nullable=False)
class DataPackage(Base):
__tablename__ = 'data_package'
id = Column(Integer, primary_key=True)
name = Column(String(100), nullable=False)
supplier_id = Column(Integer, ForeignKey('supplier.id'), index=True, nullable=False)
supplier = relationship("Supplier", backref='packages')
class DataPackageAdminView(ModelViewOnly):
form_columns = ['name', 'supplier']
inline_models = (Supplier,)
def create_app():
settings.configure_orm()
app = Flask(__name__)
app.config.from_pyfile('config.py')
@app.route('/')
def …Run Code Online (Sandbox Code Playgroud) 我尝试使用 inline_models 创建 Flask-Admin 视图。
这有效,但它逐项呈现内联项。
class MyViewFeatureEngineering(sqla.ModelView):
inline_models = ((Feature_columns),)
Run Code Online (Sandbox Code Playgroud)
但我想将其显示为列表。
它可以是可编辑的,也可以是只读的,为几列设置了 column_editable_list。
这是否可以通过 Flask-Admin 实现,或者现在是切换到完全自定义模板的时候了吗?到目前为止,似乎几乎所有东西都可以根据自己的需要进行覆盖。
谢谢
我想使用 Flask Admin 将现场项目添加到我的用户编辑表单中。
为此,我尝试重写edit_form方法以将字段作为附加属性添加到表单中,但未添加该字段。
我找不到任何关于如何在 Flask Admin 中向表单添加字段的明确文档。
有人可以帮忙吗?
class UserAdminView(ModelView):
column_exclude_list = ['password',]
form_widget_args = {
'password':{
'disabled': True
}
}
def edit_form(self, obj=None):
form = super(UserAdminView, self).edit_form(obj)
form.projects = sqla.fields.QuerySelectMultipleField(
"Projects",
query_factory=lambda: db.session.query(Project).join(UserProjectRel) \
.filter(UserProjectRel.user_id==obj.id),
)
return form
class User(db.Model):
__tablename__ = 'phaunos_user'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(255), nullable=False)
is_admin = db.Column(db.Boolean, default=False, nullable=False)
confirmed_on = db.Column(db.DateTime, nullable=True)
class UserProjectRel(db.Model):
__tablename__ …Run Code Online (Sandbox Code Playgroud) 我一直在 Google 和 StackOverflow 上搜索这方面的内容。基本上,我想尝试覆盖 Flask-Admin 上的删除函数,以不实际删除记录,而是更新名为“deleted_by”和“deleted_on”的对象行。
我在 StackOverflow 上发现了一些问题,解释了如何使用 on_model_change 更改保存按钮上的逻辑,但没有人具体说明删除模型逻辑。我在文档中也没有找到任何与此相关的信息。谁能告诉我应该如何处理这个问题?
提前致谢!