- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Flask-Admin 在其标准编辑 View 中显示由关系定义的子对象。例如,如果 User
对象具有 Address
子对象,则查看 User
的编辑 View 将显示 Address
子对象在适当的领域。然后,用户可以删除该对象,或添加另一个对象。
我希望用户能够单击,或者能够进入子对象的编辑 View 。在我描述的示例中,用户应该能够直接从 User
对象的编辑 View 访问 Address
对象的编辑 View 。
我发现的唯一相关的是inline_models
,但这不是解决方案。该实现非常脆弱(例如,它无法处理长距离关系)。 Flask-Admin 知道子对象!我可以在 View 中看到它们!我只是希望它们成为自己编辑 View 的链接...
任何人都知道如何实现此目的或可以链接到示例吗?
最佳答案
这是一个在编辑 View 中放置指向另一个模型的编辑 View 的链接的单个文件简单示例。它可能对你有帮助,也可能没有。
我使用了用户-地址关系,一个用户有一个地址,而地址可以有多个用户。
我已使用 Faker 生成示例数据,因此您需要将 pip install faker
添加到您的环境中。
这个想法是使用 Flask-Admin form rules,在本例中我正在配置 form_edit_rules
。
我创建了两个自定义规则:
Link
,继承BaseRule
。构造函数采用三个值;一个端点、与 Flask url_for 方法中的端点一起传递的属性名称,最后是显示为链接的文本。在此示例中,端点为'address.edit_view'
,因为这是我们要链接到的 View 。
MultiLink
,类似于Link
,接受它与关系一起工作。
这是代码(几乎没有错误检查):
from random import randint
from flask import Flask, url_for
from flask_admin.contrib import sqla
from flask_admin import Admin
from flask_admin.form.rules import BaseRule
from faker import Faker
from flask_sqlalchemy import SQLAlchemy
from markupsafe import Markup
from sqlalchemy import func, select
from sqlalchemy.ext.hybrid import hybrid_property
fake = Faker()
# Create application
app = Flask(__name__)
# Create dummy secrey key so we can use sessions
app.config['SECRET_KEY'] = '123456790'
# Create in-memory database
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
# app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)
# Flask views
@app.route('/')
def index():
return '<a href="/admin/">Click me to get to Admin!</a>'
class Address(db.Model):
__tablename__ = 'addresses'
id = db.Column(db.Integer, primary_key=True)
number = db.Column(db.String(255))
street = db.Column(db.String(255))
city = db.Column(db.String(255))
country = db.Column(db.String(255))
@hybrid_property
def user_count(self):
return len(self.users)
@user_count.expression
def user_count(cls):
return select([func.count(User.id)]).where(User.address_id == cls.id).label("user_count")
def __unicode__(self):
return ', '.join(filter(None, [self.number, self.street, self.city, self.country]))
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String(255))
last_name = db.Column(db.String(255))
email = db.Column(db.String(254))
address_id = db.Column(db.Integer, db.ForeignKey('addresses.id'), index=True)
address = db.relationship(Address, backref=db.backref('users'))
def __str__(self):
return unicode(self).encode('utf-8')
def __unicode__(self):
return '{} {}'.format(self.first_name, self.last_name)
class Link(BaseRule):
def __init__(self, endpoint, attribute, text):
super(Link, self).__init__()
self.endpoint = endpoint
self.text = text
self.attribute = attribute
def __call__(self, form, form_opts=None, field_args=None):
if not field_args
field_args = {}
_id = getattr(form._obj, self.attribute, None)
if _id:
return Markup('<a href="{url}">{text}</a>'.format(url=url_for(self.endpoint, id=_id), text=self.text))
class MultiLink(BaseRule):
def __init__(self, endpoint, relation, attribute):
super(MultiLink, self).__init__()
self.endpoint = endpoint
self.relation = relation
self.attribute = attribute
def __call__(self, form, form_opts=None, field_args=None):
if not field_args
field_args = {}
_hrefs = []
_objects = getattr(form._obj, self.relation)
for _obj in _objects:
_id = getattr(_obj, self.attribute, None)
_link = '<a href="{url}">Edit {text}</a>'.format(url=url_for(self.endpoint, id=_id), text=str(_obj))
_hrefs.append(_link)
return Markup('<br>'.join(_hrefs))
class UserAdmin(sqla.ModelView):
can_view_details = True
form_edit_rules = (
'first_name',
'last_name',
'email',
'address',
Link(endpoint='address.edit_view', attribute='address_id', text='Edit Address')
)
class AddressAdmin(sqla.ModelView):
can_view_details = True
column_list = ['number', 'street', 'city', 'country', 'user_count', 'users']
form_edit_rules = (
'number',
'street',
'city',
'country',
'users',
MultiLink(endpoint='user.edit_view', relation='users', attribute='id')
)
admin = Admin(app, template_mode="bootstrap3")
admin.add_view(UserAdmin(User, db.session))
admin.add_view(AddressAdmin(Address, db.session))
def build_db():
db.drop_all()
db.create_all()
for _ in range(0, 20):
_users = []
for _ in range(0, randint(1, 10)):
_user = User(
first_name=fake.first_name(),
last_name=fake.last_name(),
email=fake.safe_email(),
)
_users.append(_user)
_address = Address(
number=fake.random_digit_not_null(),
street=fake.secondary_address(),
city=fake.city(),
country=fake.country(),
users = _users
)
db.session.add(_address)
db.session.commit()
@app.before_first_request
def first_request():
build_db()
if __name__ == '__main__':
app.run(port=5000, debug=True)
关于python - Flask 管理员单击时编辑子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42962887/
有没有办法为 Sinatra 获取 Django Admin 风格的网络管理员? 最佳答案 没用过,但通过谷歌很快就显示出来了:http://www.padrinorb.com/ 关于ruby - S
我正在开发一个 Wordpress 插件,它为不同的用户(管理员、编辑、作者、贡献者、订阅者)提供不同的权限。我已经能够使该插件在管理员面板或页面/末尾完美运行,但是当我以编辑身份登录时,我无法在他们
在为 Web 应用程序用例图建模时,为用户可以拥有的每个角色创建一个角色是否更好?或拥有一个角色、用户和一个具有特权的矩阵? guest < 用户 < 版主 < 管理员 1: guest 、用户、版主
Tibco Administrator GUI 在哪里获取应用程序和服务的状态? 在我的项目中,我需要读取 Tibco admin 中列出的所有服务的状态。我没有安装 Tibco hawk,我需要除
我们最近将我们的多域 magento 设置从共享主机迁移到专用服务器。 一切正常,但是当我尝试转到管理部分时,登录后出现任何 404 错误。 如果我从 url 中删除 index.php 似乎可以工作
我有一个多对多字段。我想限制管理员在其 M2M 小部件中显示的选择。 我有一个这样的模型: class A(models.Model): b_field = models.ManyToMany
我正在与其他几位同事一起使用 Azure。我们有一个共享的管理员帐户,我们所有人都可以访问该帐户(凭据)。几天前,当尝试使用管理员帐户登录 Azure 门户时,我们收到此消息:“需要更多信息。您的组织
如何使 Django 后端(和一些 View )在不同的域中可访问?是通过站点框架完成的吗? 最佳答案 创建 settings.py 的副本并使用该设置文件运行管理服务器。此外,创建 urls.py
我刚刚收到以某种方式在 Django 管理面板上显示数据的要求。实际上我有日志表,其中包含用户 ID 和它采取的操作。 class AuditTrail(models.Model): id = m
每当我访问我的网站地址/admin 时,就会出现此问题 Warning: mysqli::mysqli() [mysqli.mysqli]: (28000/1045): Access denied f
我一直在为 Django/Mysql 中的情况而苦苦挣扎。 在同时有主键和外键的表中有这一列。此列与中间表具有一对多关系。 这是与植物物种相关的状态列表。有些物种可以在多个州找到。 物种(表 1)列:
firebase 身份验证和 firebase 管理员有什么区别? 据我所知,firebase admin 具有身份验证功能,并且可以绕过安全性,这与 firebase 身份验证不同。 Firebas
我创建了一个 SonarQube 组 sonar-administrators-ldap 并映射到 LDAP sonar-administrators-ldap 。 sonar-administrat
我正在创建一个 Django 应用程序,其中所有模型都可以按照用户设置的顺序相互关联。我正在使用 GenericForeignKeys 设置所有这些。关键是我需要能够支持这些类型的关系/管理的多个集合
我无法使用我创建的任何 super 用户登录 Django 管理员。尝试创建新的 super 用户、更改密码等 - 这些进程中的任何一个都没有错误消息,但仍然无法登录。 我不确定它是否相关,但我也无法
我正在将我的 Django 项目前端从使用 jquery 转换为 angularjs与 Django Rest Framework以帮助使其成为单页应用程序。我已经用 angular 转换了大部分棘手
我正在尝试在我的管理页面中的某个 ModelView 上加载脚本: class CustomView(ModelView): # Neither approach works here:
我正在尝试在我的 rails 应用程序中设置设计。它运行良好,但现在我无法以任何用户身份登录,我收到“电子邮件或密码无效”。我想更深入地了解为什么它不进行身份验证。 是否有任何设计配置设置可以提供更多
我目前正在尝试在 drupal 中实现第二个(较低的)管理层。我通过同名模块为这些用户制作了一个额外的部分,以便他们可以拥有自己的主题等。我想在他们的页面部分中为这些二级或更低级别的管理员提供一个菜单
如何显示来自 API 服务器 React-admin 3.0 版的错误响应消息? 此变体不起作用 https://github.com/marmelab/react-admin/pull/871 en
我是一名优秀的程序员,十分优秀!