【发布时间】:2020-11-24 23:12:57
【问题描述】:
我正在设计一个网站,允许体育教练创建团队,然后将球员添加到该团队。目标是允许教练将球员添加到他们的球队中,并通过输入比赛数据将统计数据与他们相关联。
我遇到的问题是球员能够创建自己的帐户并将他们的帐户与教练创建的一名球员相关联。教练将能够输入球员帐户的唯一 ID 并选择他在球队中创建的球员,并允许球员访问他为“假”用户输入的统计数据。此时假用户将被删除。我解决这个问题的初步设计如下:
我将使用默认的“用户”表,并通过 OneToOneField 将其链接到“配置文件”表。每当教练为他们的球队创建一名球员时,都会创建一个用户和一个相关的个人资料。假用户将有一个 UUIDField 作为 Profile 表中的 ID。我按如下方式存储玩家的统计数据:
class Stats(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
match = models.ForeignKey(Match, on_delete=models.CASCADE)
player = models.ForeignKey(User, on_delete=models.CASCADE)
...
... several stats as IntegerFields
Stats 表会将假用户作为参数,并将统计信息与该用户相关联。当真实用户创建账号,教练输入他们的UUID并选择假用户时,Stats中的“玩家”字段将被真实用户替换,假用户将被删除。
我的问题是,这是解决此问题的最佳方法吗?用没有用户名或密码的用户污染用户表感觉不好(甚至允许这样做吗?),但如果为假用户制作单独的表,我相信玩家字段会有问题。
player = models.ForeignKey(User, on_delete=models.CASCADE)
player 字段将 stats 表与 User 表相关联,并且需要一个 User 对象。如果它与假用户条目相关,我将无法将其分配给真正的玩家,因为它不是假用户对象。
我确定这个问题有一个我不知道的名称,因为它一定是 Django 中的常见问题。
【问题讨论】:
标签: django database postgresql sqlite django-models