[英]Can model views in Flask-Admin hyperlink to other model views?
假设我们有一个模型,Foo,它引用了另一个模型,User - 和Flask-Admin视图。
在Foo管理员视图页面上(例如http://mrjoes.github.io/2012/08/27/flask-admin-102.html上的第一个屏幕截图),我希望用户列中的条目是链接到相应的用户模型视图。
我是否需要修改Flask-Admin的模板之一才能实现此目的?
(这可以在Django管理界面中通过简单地输出给定字段的HTML并设置allow_tags
(ref) True来绕过Django的HTML标记过滤器)
一些基于Joes答案的示例代码:
class MyFooView(ModelView):
def _user_formatter(view, context, model, name):
return Markup(
u"<a href='%s'>%s</a>" % (
url_for('user.edit_view', id=model.user.id),
model.user
)
) if model.user else u""
column_formatters = {
'user': _user_formatter
}
使用column_formatters
: https : column_formatters
想法非常简单:对于要显示为超链接的字段,要么生成HTML字符串并使用Jinja2 Markup
类包装它(因此不会在模板中进行转义)或使用macro
助手: https:// github。 COM / mrjoes /烧瓶管理员/斑点/主/ flask_admin /模型/ template.py
宏助手允许您在覆盖模板中使用自定义Jinja2宏,这将表示逻辑移动到模板。
就URL而言,您只需找到为User
模型生成(或提供)的端点名称,并执行url_for('userview.edit_view', id=model.id)
以生成链接。
@wodow的额外信息,请注意如果你使用pymongo作为后端, model.user
是错误的,因为pymongo中的模型是一个dict类型,你可以使用model['name']
替换它
将此代码添加到其他模型和flask-admin和jinja引用的每个模型中,将处理您想要在屏幕上显示的名称,只需将其替换为您喜欢的名称:
def __unicode__(self):
return self.name # or self.id or whatever you prefer
例如:
class Role(db.Document, RoleMixin):
name = db.StringField(max_length=80, unique=True)
description = db.StringField(max_length=255)
def __unicode__(self):
return self.name
class MasterUser(db.Document, UserMixin):
email = db.StringField(max_length=255)
password = db.StringField(max_length=255)
active = db.BooleanField(default=True)
confirmed_at = db.DateTimeField()
roles = db.ListField(db.ReferenceField(Role), default=[])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.