我有一个模型,并希望系统的每个用户都有一张为自己保留的表格,尊重此模型。如何在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