flask - 将 2 个具有 1:1 关系的模型组合成一个没有嵌套的方案?
问题描述
我目前有 2 个模型,它们以 1:1 的关系关联,它们将始终一起显示。这些模型通过一个共同的 PK 链接。我创建了两个模型,它们使用flask-sqlalchemy 映射到他们的表。我将在下面制作一个简化版本:
class Author(db.Model):
key = db.Column(db.Text)
name = db.Column(db.Text)
class Book(db.Model):
key = db.Column(db.Text)
title = db.Column(db.Text)
然后我可以使用烧瓶棉花糖进行序列化:
class AuthorScheme(ma.SQLAlchemyAutoScheme):
class Meta:
model = models.Author
class BookScheme(ma.SQLAlchemyAutoScheme):
class Meta:
model = models.Book
这对单个方案很有用,我知道您可以使用嵌套,但它不是我想要创建的格式。如果我将作者嵌套在书中,它会产生如下输出:
{
key: value,
title: value,
author: {
key: value,
name: value
}
}
我见过使用模型外键的其他解决方案,它们产生与上述类似的结果。但是,我试图让它像这样序列化:
{
key: value,
title: value,
author: value,
}
这两个模型知道在“键”上合并并合并为一个。这会在实际模型中完成吗?还是在计划中?我搞不清楚了。我也认识到您可以手动执行此操作并设置字段,但我想找到一种更好的方法,因为我将执行获取所有端点并且不希望在所有模型上进行迭代。有任何想法吗?
解决方案
如果您使用的是Marshmallow V3,则可以使用该Pluck
字段(此处的文档)。类似于以下内容(未测试):
class AuthorScheme(ma.SQLAlchemyAutoScheme):
class Meta:
model = models.Author
class BookScheme(ma.SQLAlchemyAutoScheme):
class Meta:
model = models.Book
author = fields.Pluck(AuthorSchema, 'name')
这应该序列化为:
{
key: value,
title: value,
author: value,
}
推荐阅读
- python - 卡在python中的冒泡排序(仅使用while循环)
- export - 如何从 OSMdroid 导出 GPX 文件?
- reporting-services - 无法使用主机名访问 SSRS 报表服务器
- powershell - 在 Powershell 的 csv 文件中获取用户计数和实际用户数据
- c# - 具有存储库和 UnitOfWork 的 Unity 容器
- python - python 正则表达式,子组重复
- django - 获取查询以返回值列表而不是 graphene-django 中的对象
- ffmpeg - 有人可以解释ffmpeg中rtsp输入的reorder_queue_size选项吗?
- php - 如何在不使用 file_get_contents 的情况下从 Google 的 ReCaptcha 中获取?
- oracle - 哪种数据类型支持更多的字符串/字符然后 CLOB