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

Python 实现数据库范围功能的正确方法,python,database,django,django-models,coding-style,Python,Database,Django,Django Models,Coding Style,我正在用Django创建一个小网站,我需要使用数据库中几个表中的数据计算统计数据 例如(与我的实际模型无关),对于给定的用户,假设我想要他参加过的所有生日聚会,以及他在这些聚会上与之交谈的人。为此,我需要一个广泛的查询,包括几个表 现在,从面向对象的角度来看,如果用户类实现了一个返回该信息的方法,那就太好了。从数据库模型的角度来看,我根本不喜欢向需要查询其他表的“行实例”添加功能。我希望保留模型类中与该行相关的所有属性和方法,以避免将业务逻辑分散到所有地方 从面向对象的角度来看,我应该如何实现属

我正在用Django创建一个小网站,我需要使用数据库中几个表中的数据计算统计数据

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

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


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

我建议使用控制器扩展Django的模型模板视图方法。我的应用程序中通常有一个controller.py,它是数据源的唯一接口。因此,在您上面的例子中,我有一些类似于
get\u all\u parties\u和\u people\u for\u user(user)


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

用户。参加生日聚会()或活动。参加聚会(用户)工作良好:当您使用它时,它是一个有意义的界面。创建一个额外的“通用”对象不会使代码更干净或更易于维护