2015-12-17 74 views
5

幫助!Django:模型之間的參考

我有以下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

我的問題:

我想 「Deposits.user」 到自動參考這個'接收地址'所屬的用戶。在這個例子中,這是TIM。我浪費了6個小時試圖弄清楚,我做錯了什麼?

在此先感謝。

+0

您可以嘗試像'user = models.ForeignKey(Account)' – Pramod

+0

謝謝!但是這給了我選擇帳戶中的任何用戶的選項,在這種情況下 - > Bob,Alice或Tim。我需要它只顯示蒂姆。 –

+0

實際上這代表了許多對一個案件,對於每個帳戶那裏我將多重doposits。從另一方面來看,存款和賬戶之間存在着多方關係。 – Pramod

回答

3

我認爲這只是一個設計問題。你爲什麼把具有相同信息的兩個領域,因爲user有帳戶receiveaddress,將用戶添加爲外鍵就足夠了,更清潔,我建議如下:

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) 

注:由於一個約定,型號名稱應該總是單數

+0

這就是我一直在尋找的!非常感謝! –