【问题标题】:Correct way of implementing database-wide functionality实现数据库范围功能的正确方法
【发布时间】:2011-07-01 02:57:44
【问题描述】:

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

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

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

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

【问题讨论】:

标签: python database django django-models coding-style


【解决方案1】:

User.get_attended_birthday_parties() 或 Event.get_attended_pa​​rties(user) 工作正常:这是一个在您使用时才有意义的界面。创建一个额外的“通用”对象不会使您的代码更清晰或更易于维护。

【讨论】:

    【解决方案2】:

    我建议使用控制器扩展 Django 的模型-模板-视图方法。我的应用程序中通常有一个 controller.py,它是数据源的唯一接口。因此,在您的上述情况下,我会有类似 get_all_parties_and_people_for_user(user) 的内容。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 2014-11-15
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      相关资源
      最近更新 更多