在 Flask-Admin 模型视图中显示联接字段
Displaying joined fields in Flask-Admin ModelView
我有一个 Flask 应用,使用 Flask-SQLAlchemy 和一些简单的关系数据映射,例如在属于这些订单的 Orders 和 OrderItems 之间。
在我的 Flask-Admin 后端中,我想在 OrderItems 列表中显示 一些 的订单属性 — 如反对拥有整个订单 object。例如。在 OrderItems 行中列出“Order.email”(可以是 read-only)。
我查看了 ModelView 的 inline_models
属性,但这似乎更令人担心实际编辑关系 object — 我只想显示(和 sort/search by) "parent".
的一些值
有办法实现吗?
您可以通过外键关系轻松地包含字段,方法是将它们包含在 column_list
值 - documentation 中。考虑两个简化模型,注意 Address
模型中的 company
反向引用:
class Company(db.Model):
__tablename__ = 'companies'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(255), nullable=False, unique=True, index=True)
website = db.Column(db.Unicode(255), nullable=True)
notes = db.Column(db.UnicodeText())
@hybrid_property
def address_count(self):
return len(self.addresses)
@address_count.expression
def address_count(cls):
return select([func.count(Address.id)]).where(Address.company_id == cls.id).label("address_count")
def __str__(self):
return self.name
class Address(db.Model):
__tablename__ = 'addresses'
id = db.Column(db.Integer, primary_key=True)
address1 = db.Column(db.Unicode(255), nullable=False)
town = db.Column(db.Unicode(255), index=True, nullable=False)
county = db.Column(db.Unicode(255))
country = db.Column(db.Unicode(255))
post_code = db.Column(db.Unicode(10))
company_id = db.Column(db.Integer, db.ForeignKey('companies.id'), index=True)
company = db.relationship(Company, backref=db.backref('addresses', uselist=True, lazy='select', cascade='delete-orphan,all'))
def __str__(self):
return ', '.join(filter(None, [self.address1, self.town, self.county, self.post_code, self.country]))
在“地址”视图中,您可以使用点分符号访问“母公司”。例如:
class AddressView(ModelAdmin):
column_list = (
'company.name',
'company.website',
'address1',
'address2'
)
我有一个 Flask 应用,使用 Flask-SQLAlchemy 和一些简单的关系数据映射,例如在属于这些订单的 Orders 和 OrderItems 之间。
在我的 Flask-Admin 后端中,我想在 OrderItems 列表中显示 一些 的订单属性 — 如反对拥有整个订单 object。例如。在 OrderItems 行中列出“Order.email”(可以是 read-only)。
我查看了 ModelView 的 inline_models
属性,但这似乎更令人担心实际编辑关系 object — 我只想显示(和 sort/search by) "parent".
有办法实现吗?
您可以通过外键关系轻松地包含字段,方法是将它们包含在 column_list
值 - documentation 中。考虑两个简化模型,注意 Address
模型中的 company
反向引用:
class Company(db.Model):
__tablename__ = 'companies'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(255), nullable=False, unique=True, index=True)
website = db.Column(db.Unicode(255), nullable=True)
notes = db.Column(db.UnicodeText())
@hybrid_property
def address_count(self):
return len(self.addresses)
@address_count.expression
def address_count(cls):
return select([func.count(Address.id)]).where(Address.company_id == cls.id).label("address_count")
def __str__(self):
return self.name
class Address(db.Model):
__tablename__ = 'addresses'
id = db.Column(db.Integer, primary_key=True)
address1 = db.Column(db.Unicode(255), nullable=False)
town = db.Column(db.Unicode(255), index=True, nullable=False)
county = db.Column(db.Unicode(255))
country = db.Column(db.Unicode(255))
post_code = db.Column(db.Unicode(10))
company_id = db.Column(db.Integer, db.ForeignKey('companies.id'), index=True)
company = db.relationship(Company, backref=db.backref('addresses', uselist=True, lazy='select', cascade='delete-orphan,all'))
def __str__(self):
return ', '.join(filter(None, [self.address1, self.town, self.county, self.post_code, self.country]))
在“地址”视图中,您可以使用点分符号访问“母公司”。例如:
class AddressView(ModelAdmin):
column_list = (
'company.name',
'company.website',
'address1',
'address2'
)