如何在Flask/SQLAlchemy中显示包含多对多查询结果的列

you*_*you 9 python flask flask-sqlalchemy flask-admin

我正在尝试通过构建一个简单的Wiki(很大程度上基于Flask-Admin示例)来学习Python/Flask/SQLAlchemy,但我正在努力理解如何从我的多对多关系中获取一个新列来显示.

我已经成功创建了Wiki并为标签创建了一个多对多的关系表而没有任何问题(并且标签在我看到的情况下正常工作),但是我想将标签显示为列而无法获取逻辑成功了.

目标:我想显示一个列,显示多对多关联表引用的标记.

这是我想要完成的图片:

包含名为Tag(s)的列的表,其中包含两行. 第1行包含文本

以下是我认为的相关代码:

wiki_tags_table = db.Table('wiki_tags', db.Model.metadata,
                           db.Column('wiki_id', db.Integer, db.ForeignKey('wiki.id')),
                           db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'))
                           )

class Wiki(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), unique=True)
    description = db.Column(db.Text)
    path = db.Column(db.Unicode(256))
    date_added = db.Column(db.DateTime)
    tags_id = db.Column(db.Integer, db.ForeignKey('tag.id'))
    tags = db.relationship('Tag', secondary=wiki_tags_table, backref=db.backref('wiki_tags_table', lazy='dynamic'))

    def __unicode__(self):
        return self.item

class WikiAdmin(sqla.ModelView):

    column_exclude_list = ['path']

    column_hide_backrefs = False

    form_overrides = {
        'path': form.FileUploadField
    }

    form_args = {
        'path': {
            'label': 'File',
            'base_path': file_path
        }
    }

    column_searchable_list = ('title', 'description', 'path')

    def __init__(self, session):
        super(WikiAdmin, self).__init__(Wiki, session)

class Tag(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Unicode(64))

    def __unicode__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

我一直在引用这些文档(主要是尝试backref的变体),但还没有想出来:

Rac*_*ers 0

关系属性将相关表加载为对象列表,因此您应该能够在视图中打印所有 wiki 项目和所有关联标签,如下所示:

for wiki_item in Wiki.query.all():
    print wiki_item.title
    for tag in wiki_item.tags:
        print tag.name 
Run Code Online (Sandbox Code Playgroud)

如果你尝试这样做会发生什么?