json - 数据库中的多对多表不适用于弹性搜索
问题描述
我有一个在 Flask 和 sqlalchemy 上运行的网站,其中项目可以有多个标签。这种多对多关系由中间表 ( tag_map
) 支持。可搜索的模型由Miguel Grinberg 的烧瓶教程中定义的 SearchableMixin 类组成。所涉及的表的一般结构是:
from app import db
# the many-to-many table
tag_map = db.Table('tag_map',
db.Column('project_id', db.Integer, db.ForeignKey('project.id')),
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')) )
...
class Project(SearchableMixin, db.Model):
__searchable__ = [...,'tags']
...
tags = db.relationship(
'Tag', secondary=tag_map,
backref=db.backref('tag_map', lazy='dynamic'), lazy='dynamic')
class Tag(SearchableMixin, db.Model):
__searchable__ = ['name']
...
name = db.Column(db.String(25))
tags = db.relationship(
'Project', secondary=tag_map,
backref=db.backref('tag_map', lazy='dynamic'), lazy='dynamic')
当我使用我网站的搜索栏搜索标签时,什么也没有出现。当我尝试从特定项目中删除标签时,我收到以下形式的 SerializationError:
elasticsearch.exceptions.SerializationError: ({'category': 'learning', 'name': '236', 'descr':
'.', 'tags': <sqlalchemy.orm.dynamic.AppenderBaseQuery object at 0x7ffbbc8c0810>},
TypeError("Unable to serialize <sqlalchemy.orm.dynamic.AppenderBaseQuery object at 0x7ffbbc8c0810>
(type: <class 'sqlalchemy.orm.dynamic.AppenderBaseQuery'>)"))
我猜这Project.tags
应该适应可搜索的mixin,但我不确定如何。如何使我的多对多表以更类似于 JSON 的方式解释?
解决方案
推荐阅读
- tabulator - 使用 Tabulator 设置最大列宽
- amazon-web-services - 以编程方式激活用户定义的成本分配标签
- javascript - AJAX 调用上的加载程序图像未显示在移动屏幕上,但在桌面屏幕上正常工作
- javascript - Js 对象项不设置为空对象
- python - 我希望从 python 中的单个大数据框生成一系列较小的数据框,同时使用过滤器命名数据框
- c# - 正则表达式问题(在 asp.net MVC5 中)
- sql - 按特定年份对列中的所有 - / + 值求和
- scala - Akka TCP 请求响应需要 Thread.sleep
- mysql - 获取两条记录之间的差异
- scripting - 攻击者可以下载 cgi 脚本吗?