2009-11-19 73 views
3

我有一個模型,並希望系統的每個用戶都有一張爲自己保留的表格,尊重此模型。如何在django上爲每個用戶創建一個模型(表格)?

要說清楚:

想象一下模型「遊戲」。 我不想只存在一表「遊戲」,但有: foo_games,bar_games(富/欄是系統的用戶)

如何做到這一點?


編輯:

爲什麼呢?

想象一下,我有1000個用戶,每個用戶有100個遊戲。

你認爲你有一張1000 * 100的桌子比擁有1000桌子的桌子要好嗎?

+1

一個問題 - 爲什麼?!?!?!?! – 2009-11-19 17:47:05

+2

您可能想重新考慮您的問題。不需要每個用戶單獨的表格。一個「遊戲」表應該與用戶表的外鍵一起工作。 – Thomas 2009-11-19 17:50:52

+1

沒錯。有一個用戶模型,其中一個屬性是對遊戲模型的引用。 – 2009-11-19 17:59:19

回答

8

通常用Django ORM處理這種方式是通過將兩個模型(表)與外鍵鏈接在一起。然後,您可以通過使用.filter()方法獲取適用於用戶的記錄。這樣看來每個用戶都有自己的表格。例如...

from django.contrib.auth.models import User 
from django.db import models 

class Game(models.Model): 
    name = models.CharField(max_length=50) 
    owner = models.ForeignKey(User) 

這裏的ForeignKey字段提供了一個將1個遊戲記錄與特定用戶相關聯的「鏈接」。

當你想檢索應用只是1個用戶的遊戲,你可以這樣做是這樣的:

# Select whichever user you want to (any of these work) 
user = User.objects.get(username='admin') 
user = User.objects.get(id=64) 
user = request.user 

# Then filter by that user 
user_games = Game.objects.filter(owner=user) 

編輯 -

要獲得關於更多的行與問題更多表格:關係數據庫服務器經過優化,在單個表格中具有巨大的行容量。通過您的示例查詢,1000 * 100只有100,000條記錄,這可能只佔表格理論上可容納的百分之零點一(服務器內存和存儲除外)。

+1

這是正確的,但我會讓所有者成爲ManyToMany字段,這樣許多用戶就可以共享相同的遊戲 – Evgeny 2009-11-19 19:05:59

+1

根據OP對「每個用戶一張桌子」的描述,我假設永遠不會發生這種情況。儘管肯定會有,但取決於應用程序。 – 2009-11-19 19:33:41

相關問題