django - 哪种方法更适合在 Django 中进行标记?多对多还是 ArrayField?
问题描述
我正在 Django 中构建一个新项目。该项目包含Users
和Paintings
. 一个User
拥有许多Paintings
。我希望Users
能够标记他们的Painting
,然后能够使用标签对它们进行排序。
AUser
需要能够同时搜索 n 个标签。此外,API 将返回与其查询兼容的标签。比如说,我有以下架构:
{
"User#1": {
...
"paintings": {
"Mona Lisa": {
"tags": ["Da Vinci", "Gioconda", "Portrait", "Color"]
},
"Ginevra de' Benci": {
"tags": ["Da Vinci", "Portrait", "Color"]
},
"The Last Supper": {
"tags": ["Da Vinci", "Landscape", "Color"]
},
}
}
}
User
想要获取所有带有“肖像”标签的Paintings
,API 将首先返回兼容标签(“达芬奇”、“颜色”、“乔康达”),然后它会返回Paintings
带有“肖像”的标签(“蒙娜Lista”,“Ginevra de' Benci”)。我想为用户提供一种直观的方式来编写长的标签查询。
我的问题是:什么更好?使用“标签”模型并将其Painting
与具有多对多的模型相关联?或者在模型中添加一个“标签”ArrayField Painting
?
我问的是安全性、性能和资源使用情况。我不想让任何User
人知道Painting
其他人有什么,但我不希望他们永远等待得到他们的查询结果。我也不想用过多的冗余数据阻塞我的数据库,但我需要我的用户能够动态添加(和创建)新标签
解决方案
推荐阅读
- python - 如何在金字塔中同时获取文件大小和文件名?
- postgresql - 减少 Postgres Docker 的日志输出?
- php - PHP - twilio 错误 - 52004 未指定凭据 SID
- android - 如何在 ListView 上显示颜色和字体
- python - 服务器在最后一个块之前发送“最后一个块”
- android - 在依赖项中选择特定的构建类型
- database - 无法在 Windows 10 上配置 oracle 12c
- typescript - Typescript:如何编写类型保护来判断一个值是否是联合的成员?
- python - ModelMultipleChoiceField 上的 Django Multi 值
- python - Boto3:如何获取从 Spot 请求创建的实例 ID?