如何使用唯一的密钥帐户 - 用户组合构建多对多django模型

时间:2017-02-19 16:57:32

标签: python django django-models

我对如何构建我的django模型存在问题。

我有用户模型和帐户模型。

用户可以在多个帐户中。每个用户都应拥有每个帐户的密钥。

我希望能够获得与帐户和用户组合相关联的密钥。

用户1在帐户A和B中。如果我查询帐户A和用户1,我应该得到key1,如果我查询B和1,我应该得到key2。

keys = {AccountA:key1,AccountB:key2}

我对如何存储这些数据感到困惑。我知道我可以序列化json并存储为文本字段。但我认为这将是混乱的。我希望能够在需要时重新生成密钥。什么是

class User(models.Model):
    accounts= models.ManyToManyField(Account)
    keys = models.TextField()

OR

class User(models.Model):
    accounts= models.ManyToManyField(Account)
    keys = models.ManyToManyField(AnotherModel?)

还有别的吗?警告:我不能使用hstore或jsonfield。我在django 1.7

1 个答案:

答案 0 :(得分:0)

您需要的是与数据库规范化有关。我建议阅读更多有关该主题的内容。现在回到具体的例子。

如果每个用户 - 帐户组合都是唯一的,我会设置多对多关系。

class User(models.Model):
    accounts= models.ManyToManyField(Account, 
                                     through='UserAccount',
                                     related_name='user_accounts',
    )

class UserAccount(models.Model):
    user = models.ForeignKey(Account, on_delete=models.CASCADE)
    account = models.ForeignKey(User, on_delete=models.CASCADE)
    key = models.UUIDField()

之后,您可以通过选择与具体用户相关的所有UserAccount实例来简化所有密钥。