我有一個模型,並希望系統的每個用戶都有一張爲自己保留的表格,尊重此模型。如何在django上爲每個用戶創建一個模型(表格)?
要說清楚:
想象一下模型「遊戲」。 我不想只存在一表「遊戲」,但有: foo_games,bar_games(富/欄是系統的用戶)
如何做到這一點?
編輯:
爲什麼呢?
想象一下,我有1000個用戶,每個用戶有100個遊戲。
你認爲你有一張1000 * 100的桌子比擁有1000桌子的桌子要好嗎?
我有一個模型,並希望系統的每個用戶都有一張爲自己保留的表格,尊重此模型。如何在django上爲每個用戶創建一個模型(表格)?
要說清楚:
想象一下模型「遊戲」。 我不想只存在一表「遊戲」,但有: foo_games,bar_games(富/欄是系統的用戶)
如何做到這一點?
編輯:
爲什麼呢?
想象一下,我有1000個用戶,每個用戶有100個遊戲。
你認爲你有一張1000 * 100的桌子比擁有1000桌子的桌子要好嗎?
通常用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條記錄,這可能只佔表格理論上可容納的百分之零點一(服務器內存和存儲除外)。
這是正確的,但我會讓所有者成爲ManyToMany字段,這樣許多用戶就可以共享相同的遊戲 – Evgeny 2009-11-19 19:05:59
根據OP對「每個用戶一張桌子」的描述,我假設永遠不會發生這種情況。儘管肯定會有,但取決於應用程序。 – 2009-11-19 19:33:41
一個問題 - 爲什麼?!?!?!?! – 2009-11-19 17:47:05
您可能想重新考慮您的問題。不需要每個用戶單獨的表格。一個「遊戲」表應該與用戶表的外鍵一起工作。 – Thomas 2009-11-19 17:50:52
沒錯。有一個用戶模型,其中一個屬性是對遊戲模型的引用。 – 2009-11-19 17:59:19