2010-11-09 40 views
0

我定義的費用模型費用應用程序,如何動態創建,syncdb和訪問django模型?

class Expense(models.Model): 
    pub_date = models.DateTimeField() 
    amount = models.IntegerField() 
    memo = models.TextField() 

,我想創建失去了單獨的表保持爲不同的用戶數據,如

james_expense_table for james 
william_expense_table for william 
.... 
balabala_expense_table for balabala 

他們是完全相同相同的行爲,如並行對象。唯一的區別是前綴。所以,我可以使用更多功能輕鬆擴展應用程序。

那麼我該如何做到這一點?

我讀過一些從Django網站抽象模型的東西。但實際上,它們是靜態,在* .py文件中硬編碼,不是我想要的。

還有一個問題,對於靜態模型(硬編碼在* .py文件中),它可以使用「manage.py syncdb」命令將模塊字段同步到表字段,那麼如何才能做到這一點動態的情況?

回答

0

你想要什麼可能是使用ForeignKey,使您可以將錶鏈接到不同的用戶:

class Expense(models.Model): 
    pub_date = models.DateTimeField() 
    amount = models.IntegerField() 
    memo = models.TextField() 
    user = models.ForeignKey(MyUserField) 

顯然,你需要有一個MyUserField實施和進口。

然後,您可以從Expense

my_expense.user 

還是Expense表從用戶使用訪問用戶:

my_user.expense_set.all() 

你再不需要爲每個新用戶運行的執行syncdb ,並且它不是靜態硬編碼的文件。

+0

謝謝。但是這個解決方案對我來說還不夠好。我仍然希望用很多**表來代替一個表,以使每個表儘可能短。隔離用戶的數據對我的應用程序非常重要。 – William 2010-11-09 17:04:54

+0

表長度可能不相關,因爲您應該在用戶字段上有索引。關於「數據隔離」,你可能需要更加明確你需要什麼,但是如果你希望用戶只能看到它的表格,那麼你可以嘗試創建一些「視圖」。我沒有看到任何其他簡單的解決方案來動態創建表。 – 2010-11-10 08:03:03