如何在django上为每个用户创建一个模型(表)?

2023-11-25

我有一个模型,并希望系统的每个用户都有一个为自己保留的表,尊重这个模型。

为了明确起见:

想象一下“游戏”模型。 我不希望只有一张桌子“游戏”,但是有: foo_games, bar_games (foo / bar 是系统的用户)

这个怎么做 ?


edit:

why ?

假设我有 1000 个用户,每个用户有 100 个游戏。

您认为一张包含 1000 * 100 个项目的表比拥有 1000 个表(每个表包含 100 个项目)更好吗?


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)

Edit --

要回答有关更多行与更多表的问题:关系数据库服务器经过优化,可以在单个表中拥有巨大的行容量。对于您的示例查询,1000 * 100 只是 100,000 条记录,这可能只是表理论上可以容纳的内容的 0.01%(不考虑服务器内存和存储)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在django上为每个用户创建一个模型(表)? 的相关文章

随机推荐