2015-12-17 16 views
5

Help! Django:モデル間の参照

私が欲しい "Deposits.user" に自動的に参照:

私は、次の2つの機種があります。

class Account(models.Model): 
    username = models.OneToOneField(User, primary_key=True, unique=True) 
    receiveaddress = models.CharField(max_length=40, blank=True, null=True, unique=True) 
    balance = models.DecimalField(max_digits=16, decimal_places=8, default=0) 

    def __str__(self): 
     return str(self.username) 


class Deposits(models.Model): 
    receiveaddress = models.CharField(max_length=40, blank=True, null=True, unique=True) 
    amount = models.DecimalField(max_digits=16, decimal_places=8, default=0) 

    user = ????????????????? 

    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 
    confirmed = models.BooleanField(default=False) 
    accounted = models.BooleanField(default=False) 

    def __str__(self): 
     return str(self.receiveaddress) 

例: Visualization

私の問題をこの 'receiveaddress'が属するユーザ。この例では、TIMです。私はそれを理解しようとしている6時間を無駄にした、何が間違っている?

ありがとうございます。

+0

'user = models.ForeignKey(Account)'のようなものを試すことができます – Pramod

+0

ありがとう!しかし、これは私に、この場合は - >ボブ、アリス、またはティムのアカウントの任意のユーザーを選択するオプションを与えます。私はティムだけを示すためにそれが必要です。 –

+0

実際にはこれは多くの場合から1つの場合を表しています。言い換えれば、預金と勘定の間には多くの関係があります。 – Pramod

答えて

3

デザイン上の問題だと思います。なぜあなたはuserが外部キーとしてユーザーを追加し、receiveaddressのアカウントを持っているので、同じ情報を持つ2つのフィールドを置けばいいのに十分ときれいになり、私は次のことをお勧め:

class Account(models.Model): 
    username = models.OneToOneField(User, primary_key=True, unique=True) 
    receiveaddress = models.CharField(max_length=40, blank=True, null=True, unique=True) 
    balance = models.DecimalField(max_digits=16, decimal_places=8, default=0) 

    def __str__(self): 
     return str(self.username) 


class Deposit(models.Model): 
    amount = models.DecimalField(max_digits=16, decimal_places=8, default=0) 
    user = models.ForeignKey(User, related_name="deposits") 
    created_at = models.DateTimeField(auto_now_add=True) 
    updated_at = models.DateTimeField(auto_now=True) 
    confirmed = models.BooleanField(default=False) 
    accounted = models.BooleanField(default=False) 

    def __str__(self): 
     return str(self.user.account.receiveaddress) 

NB:通りコンベンション、モデル名は常に単数でなければなりません

+0

それは私が探していたものです!どうもありがとうございます! –

関連する問題