2012-07-04 85 views
5

我正在爲Django中的權限創建裝置。我可以按照需要加載它們。然而,我的問題是...我想加載表auth_group_permissions的燈具,我需要指定group_idpermission_id,不幸的是燈具不是處理這個問題的最好方法。有沒有一種更簡單的方式來以編程方式執行此操作所以我可以得到id特定的值,並填寫它們?這通常如何完成?Django裝置權限

回答

8

正確的解決方案是以與框架本身相同的方式創建權限。

您應該連接到模塊management.pymanagement/__init__.py中的內置post_syncdb信號,並在那裏創建權限。該文檔確實表示,爲響應post_syncdb信號而執行的任何工作都不應該執行任何數據庫更改,但您還應該注意,框架本身會根據此信號創建權限。

所以我建議你看看django.contrib.auth應用程序的management module,看看它應該如何完成。

3

由於至少Django> = 1.7,由於引入了「自然鍵」作爲序列化選項,因此接受的答案不再是正確的答案。

你可以閱讀更多關於自然鍵在Django serialization documentation

的文件明確提到了自然鍵是在該使用情況..

...對象自動Django在數據庫中創建的同步過程中,給定關係的主鍵不易預測;這將取決於遷移的執行方式和時間。所有自動生成對象的模型都是如此,特別是包括權限,組和用戶。

python manage.py dumpdata auth --natural-foreign --natural-primary -e auth.Permission

的auth_permissions表必須明確排除與-e標誌作爲表被填充:

因此,對於您的具體問題,關於auth_group_permissions,你會使用以下語法轉儲夾具通過migrate命令並且在加載燈具之前已經有數據。

然後該夾具將以與任何其他夾具相同的方式加載