you*_*you 9 python flask flask-sqlalchemy flask-admin
我正在尝试通过构建一个简单的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
Run Code Online (Sandbox Code Playgroud)
我一直在引用这些文档(主要是尝试backref的变体),但还没有想出来:
关系属性将相关表加载为对象列表,因此您应该能够在视图中打印所有 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)
如果你尝试这样做会发生什么?
| 归档时间: |
|
| 查看次数: |
2228 次 |
| 最近记录: |