2011-11-17 70 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