2009-11-19 109 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

相关问题