在 Flask-Admin 模型视图中显示联接字段

Displaying joined fields in Flask-Admin ModelView

我有一个 Flask 应用,使用 Flask-SQLAlchemy 和一些简单的关系数据映射,例如在属于这些订单的 OrdersOrderItems 之间。

在我的 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'
        )