我正在尝试通过构建一个简单的 Wiki(很大程度上基于Flask-Admin 示例)来学习 Python/Flask/SQLAlchemy,但我很难理解如何从我的多对多关系中获取一个新列来显示。
我已经成功创建了 Wiki 并为没有问题的标签创建了多对多关系表(据我所见,标签工作正常),但我想将标签显示为列并且无法获取逻辑解决了。
目标:我想显示一列,显示多对多关联表引用的标签。
这是我要完成的工作的图片:
这是我认为相关的代码:
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
我一直在参考这些文档(主要是尝试 backref 的变体),但还没有弄清楚: