[英]Python (django) generic module development - Storing a dynamic queryset in the database? Model inheritance
在要最終發布的Python Django模型的背景下,我有一個有趣的設計決定。
這些類對ApprovalRequest進行建模,該ApprovalRequest表示用戶提出的一個問題/請求,可以由另一個用戶組投票,也可以對其進行上訴,然后可以由“更高級別”的組再次投票,等等。
我對以下模型樹有什么看法:
我的第一個問題是關於“動作類型”的。 因為我的意圖是使它成為任何人都可以使用的可重用模塊,所以我希望它在事件發生時發出信號。 但是,此模型適用於多種情況-審核,提升用戶,禁止用戶上訴等。因此,需要某種“類型”參數。 在OOP設計中解決此問題的經典方法是允許創建子類並具有自定義操作,這很好,但是Django(尤其是Django)沒有簡單的方法來從數據庫中獲取“正確的”子類。 例如,使用內置的模型繼承,每個孩子的數據將有一個主ApprovalRequest數據庫表和N個其他數據庫表。
我最初的想法是創建一個子類“注冊表”,該子類將為我的類型字段分配一個唯一的ID,這樣當我需要執行特定於類型的操作時,我可以可靠地將其下垂到已注冊的類型。 這將迫使子類為其子類選擇一個(項目范圍內的)id,並且通常看起來很不雅致。
我的第二個問題與“可以投票的用戶”有關。 我希望大多數ApprovalRequest對象實際上是由代碼創建的,而不是通過Django admin創建的。 假設發生以下動作:
問題是或多或少,我如何以安全的方式存儲此復雜的查詢集? 我可以將這項工作委托給基於類型的子類,但這似乎很不雅致。 我可以嘗試以某種方式將queryset存儲在數據庫中 ,但這似乎有點hacky。 選擇的標准路線是什么?
感謝您對這些問題的任何建議。
Django中已經存在為模型分配唯一ID的機制: https : //docs.djangoproject.com/en/dev/ref/contrib/contenttypes/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.