2011-11-17 60 views
0

我想用Django的ORM编写这个SQL请求:在django中选择连接(选择xxx)?

SELECT * FROM versionning t1 
    JOIN (
     SELECT MAX(version) AS version, name FROM versionning 
     WHERE updated < '2011-11-15' 
     GROUP BY name 
     ) t2 
    ON t1.version = t2.version AND t1.name = t2.name 

在SQL表 'versionning' 是:

CREATE TABLE IF NOT EXISTS `versionning` (
    `uuid` varchar(36) NOT NULL, 
    `name` varchar(40) NOT NULL, 
    `version` int(11) NOT NULL, 
    `updated` datetime NOT NULL, 
    `data` varchar(80) NOT NULL, 
    PRIMARY KEY (`uuid`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

的目标是有versionning的对象。就我而言,我希望能够拥有几个具有相同名称但版本号不同的对象。然后我想选择'2011-11-15'上的所有对象的最新版本。

我该如何使用Django ORM来做到这一点?

+0

https://docs.djangoproject.com/en/dev/topics/db/aggregation/#joins-and-aggregates –

回答

0

很好的解决方案,以你的既定目标是使用Django-Reversion

从链接:

Django的逆转的一个扩展Django的web框架是 提供全面的版本控制工具。

特点

  • 回滚到模型中的历史上的任何一点 - 无限撤消 设施!
  • 恢复删除的模型 - 永不丢失数据!
  • 最大可用性的管理集成。
  • 将相关更改分组为 版本可以在单个事务中回滚。
  • 使用Django灵活的信号框架,在模型更改时自动保存新版本 。
  • 使用易于使用的中间件自动修改您的修订版 管理。

Django的返可以轻松 添加到您现有的Django项目与代码 变化降到最低。

+0

不幸的是,Django-Reversion无法像我的SQL请求那样进行选择:您必须为您显示的每个对象提出请求。 – Eric