我解釋了一個不同的問題,但我認爲解決方案可能是需要研究的問題。
一旦我正在開發一個項目以可視化數據,我需要一個非常大的表格來存儲所有可視化數據。原來這是一個大問題,因爲我不得不做一些像Model.objects.filter(visualization=5)
這樣的事情,但這不是很優雅而且效率不高。
爲了讓事情更簡單,更高效,我最終創建了動態模型。基本上我會在數據庫中創建一個單獨的表格,然後只爲那個可視化文件存儲數據。我的代碼是這樣的:
def get_model_class(table_name):
class ModelBase(ModelBase):
def __new__(cls, name, bases, attrs):
name = '{}_{}'.format(name, table_name)
return super(ModelBase, cls).__new__(cls, name, bases, attrs)
class Data(models.Model):
# fields here
__metaclass__ = ModelBase
class Meta(object):
db_table = table_name
return Data
dynamic_model = get_model_class('foo')
,因爲它允許的查詢要快很多,但是這是我的目的,有用又回到了你的問題,我覺得這樣的事情可能是有用的,因爲這將確保每一個客戶的數據不僅通過一個外鍵是分開的,而且實際上在db中是分開的。
除了在使用模型之前,使用這種方法是非常直接的,你必須調用函數來獲取它爲每個客戶端。爲了讓事情更有效率,可以緩存/記憶函數調用的結果,以便它不必多次重新計算同一個事物。
自定義管理器肯定是要走的路 – joshcartme 2013-02-17 07:26:05