2017-02-19 9 views
0

私はdjangoモデルの構造に問題があります。一意のキーアカウントとユーザーの組み合わせで多対多のdjangoモデルを構成する方法

私はUserモデルとAccountモデルを持っています。

ユーザーは複数のアカウントに存在する可能性があります。各ユーザーには、各アカウントのキーが必要です。

アカウントとユーザーの組み合わせに関連付けられたキーを取得したいと考えています。

ユーザー1はアカウントAとBにあります。アカウントAとユーザー1を照会するとkey1を取得し、Bと1を照会するとkey2を取得するはずです。

キー= {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

+0

キーとは何ですか?キーはどのようにデータモデルに関連していますか? –

+0

鍵はuuidです。 – throwaway

+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インスタンスを選択することで、すべてのキーを簡単に取得できます。

関連する問題