python - 实现数据库范围功能的正确方法

标签 python database django django-models coding-style

我正在使用 Django 创建一个小型网站,我需要使用从数据库中的多个表中获取的数据来计算统计信息。

例如(与我的实际模型无关),对于给定的用户,假设我想要他参加过的所有生日聚会,以及他在上述聚会中与之交谈的人。为此,我需要一个广泛的查询,访问多个表。

现在,从面向对象的角度来看,如果 User 类实现一个返回该信息的方法,那就太好了。从数据库模型的角度来看,我一点也不喜欢向需要查询其他表的“行实例”添加功能的想法。我想保留 Model 类中与该行相关的所有属性和方法,以避免将业务逻辑分散到各处。

从面向对象的角度来看,我应该如何实现数据库范围内属于单个对象的查询?我应该有一个外部的上帝对象知道如何收集和组织这些信息吗?还是有更好、更优雅的解决方案?

最佳答案

我建议使用 Controller 扩展 Django 的模型-模板- View 方法。我的应用程序中通常有一个 controller.py,它是数据源的唯一接口(interface)。所以在你上面的例子中,我会有类似 get_all_parties_and_people_for_user(user) 的东西。

当您的“从数据库中的多个表中获取的数据”变成“从多个数据库中的多个表中获取的数据”甚至“从各种来源(例如数据库、缓存后端、外部 API 等)获取的数据”时,这尤其有用。 ".

关于python - 实现数据库范围功能的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5063658/

相关文章:

python - 从 sklearn 随机森林回归器可视化决策树

Python 多处理 : how to safely change working directory of one of the processes

php - 有哪些方法可以改进这个长 mysql 搜索查询?

python - 在 PyTorch 中将值从一个张量复制到另一个张量的最快方法是什么?

php - 搜索行数较少的表与搜索行数较多的表相比

mysql - 提供数据分析的数据库策略

ios - Django 休息框架日期时间字段格式

python - Django:如何使用 Django 中的 DateTimeField DB 过滤用户输入日期,将过滤器选项作为字典传递?

python - django 当前路径 image/25x25 与这些都不匹配

python - QTableWidget:删除或扩展到整行单元格的事件突出显示