是否可以在 Flask Admin 的编辑视图中使用column_formatters ?当我添加以下代码时,它在列表表单视图中呈现“随机”。但是当它呈现编辑视图时,该字段是原始的,不使用column_formatters。我对其进行了调试,确实正在使用 _user_formatter 方法仅用于列表视图。
self.column_formatters = {'model': self._user_formatter,}
def _user_formatter(self,view, context, model, name):
return "random"
Run Code Online (Sandbox Code Playgroud) 我想使用 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) 根据flask-admin 文档,我可以通过创建文件templates/admin/index.html并扩展.flask-admin 来扩展主flask-admin 仪表板admin/master.html。HTML 看起来像这样:
{% extends 'admin/master.html' %}
{% block body %}
<h1>HELLO</h1>
{% endblock body %}
Run Code Online (Sandbox Code Playgroud)
但我找不到任何有关如何扩展模型 CRUD 页面的信息:List、Edit 和 Create。我需要扩展“创建和编辑用户”页面,以便可以将 js 代码添加到表单模板中。
是否有一个模板可以像admin/master.html示例一样扩展?
我一直在 Google 和 StackOverflow 上搜索这方面的内容。基本上,我想尝试覆盖 Flask-Admin 上的删除函数,以不实际删除记录,而是更新名为“deleted_by”和“deleted_on”的对象行。
我在 StackOverflow 上发现了一些问题,解释了如何使用 on_model_change 更改保存按钮上的逻辑,但没有人具体说明删除模型逻辑。我在文档中也没有找到任何与此相关的信息。谁能告诉我应该如何处理这个问题?
提前致谢!
如何HSTORE使用Flask-Admin 更新字段?
常规ModelView不会HSTORE在"编辑"视图中显示该字段.它没有任何表现.根本没有控制权.在列表视图中,它显示一个包含JSON表示法数据的列.这对我来说没问题.
使用自定义ModelView,我可以将HSTORE字段更改为TextAreaField.这将在编辑视图中以JSON表示法显示HSTORE字段.但我无法编辑/更新它.在列表视图中,它仍然以JSON表示法显示对象.看起来很好.
class MyView(ModelView):
form_overrides = dict(attributes=fields.TextAreaField)
Run Code Online (Sandbox Code Playgroud)
当我尝试保存/编辑JSON时,我收到此错误:
sqlalchemy.exc.InternalError
InternalError: (InternalError) Unexpected end of string
LINE 1: UPDATE mytable SET attributes='{}' WHERE mytable.id = ...
^
'UPDATE mytable SET attributes=%(attributes)s WHERE mytable.id = %(mytable_id)s' {'attributes': u'{}', 'mytable_id': 14L}
Run Code Online (Sandbox Code Playgroud)
现在 - 使用代码,我可以将一些内容保存到HSTORE字段中:
class MyView(ModelView):
form_overrides = dict(attributes=fields.TextAreaField)
def on_model_change(self, form, model, is_created):
model.attributes = {"a": "1"}
return
Run Code Online (Sandbox Code Playgroud)
这基本上覆盖了模型并将此对象放入其中.然后,我可以在列表视图和编辑视图中看到该对象.还不够好 - 我想保存/编辑用户输入的对象.
我试图解析并将表单中的内容保存到JSON中并退出.这不起作用:
class MyView(ModelView):
form_overrides = dict(attributes=fields.TextAreaField)
def on_model_change(self, form, …Run Code Online (Sandbox Code Playgroud) 烧瓶初学者在这里.我有一个使用以下型号的Flask应用程序:
class Question(db.Model):
__tablename__ = 'questions'
id = db.Column(db.Integer, primary_key=True)
text = db.Column(db.String, nullable=False)
class Answer(db.Model):
__tablename__ = 'answers'
id = db.Column(db.Integer, primary_key=True)
text = db.Column(db.String, nullable=False)
question_id = db.Column(db.Integer, db.ForeignKey('questions.id'))
question = db.relationship("Question", backref="answers")
Run Code Online (Sandbox Code Playgroud)
我在我的应用程序中使用以下行启动管理员:
admin = Admin(app)
admin.add_view(ModelView(Question, db.session))
admin.add_view(ModelView(Answer, db.session))
Run Code Online (Sandbox Code Playgroud)
现在在答案模型的创建表单中,我有一个问题的下拉框,但它没有正确填充:

该快速入门指南不包括与外键关系模型,虽然有一些可能的实现方式的例子,它们不是在所有的记录.我很难弄清楚这里真正需要什么以及它是如何工作的.
我的模型中有一些字段,我特别想要从我的模型中排除ModelView.
参考https://flask-admin.readthedocs.org/en/latest/api/mod_model/,我尝试使用form_exclude_columns例如排除这些特定字段,例如
class UserView(ModelView):
form_exclude_columns = ('created', 'modified')
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.
如何在my create和editModelView页面中轻松排除这两个字段?
我有一个简单的模型Call,正在使用Flask-Admin创建/编辑/删除该模型的实例。
“呼叫”字段之一是音频文件的路径。我希望能够通过添加一些html代码在管理员中播放文件。我检查了模板flask_admin/templates/bootstrap3/admin/model/list.html,看来唯一要做的方法是在行的末尾添加一个单元格,这意味着扩展list.html,复制整个块list_row并添加我的单元格。
这是唯一的方法吗?还是有什么方法可以在音频播放器(基本上是html5)中添加“假”字段?
flask_admin / templates / bootstrap3 / admin / model / list.html
....
{% for c, name in list_columns %}
<td class="col-{{c}}">
{% if admin_view.is_editable(c) %}
{% if form.csrf_token %}
{{ form[c](pk=get_pk_value(row), value=get_value(row, c), csrf=form.csrf_token._value()) }}
{% else %}
{{ form[c](pk=get_pk_value(row), value=get_value(row, c)) }}
{% endif %}
{% else %}
{{ get_value(row, c) }}
{% endif %}
</td>
{% endfor %}
<td>ADD MY CUSTOM CELL HERE?</td>
....
Run Code Online (Sandbox Code Playgroud)
models.py
class Call(db.Model):
__tablename__ = 'calls'
id …Run Code Online (Sandbox Code Playgroud) 我有一个我的用户模型的Flask-Admin列表视图(ModelView),其中包括一些字段,自定义标题等.一切正常,我已经覆盖了默认列表模板,因此我可以匹配应用程序其余部分的样式.
但是,我的外键列出现在列表的开头,我需要移动它们,以便表格更有意义.
如何指定列的显示顺序?这是可能的,还是我只需要在列表模板中添加一些讨厌的条件?
我在Flask-Admin中有一个带过滤器的模型(例如,基于其他模型的外键)。
我想在前端应用管理器生成到模型视图的链接,并应用过滤器值。我注意到它添加?flt0_0=到中url,因此整个地址看起来有点:
http:/.../admin/model_view_<my model>/?flt0_0=<filter value>
生成这样的路线的最佳方法是什么?