2015-12-17 24 views
5

Yardım! Django: Modeller arası referans

Ben şu 2 modeller:

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) 

Örnek: Visualization

Benim sorun: Ben otomatik referansa "Deposits.user" istemek

Bu 'receiveaddress' ait olduğu kullanıcı. Örnekte, bu TIM. Anlamaya çalışıyorum 6 saat harcadım, ne yapıyorum yanlış?

Şimdiden teşekkürler.

+0

Kullanıcı = models.ForeignKey (Hesap) ' – Pramod

+0

Teşekkür gibi bir şey deneyebilirsiniz! Ancak bu bana hesaplardaki herhangi bir kullanıcıyı, bu durumda -> Bob, Alice veya Tim'i seçme seçeneği sunuyor. Sadece Tim'i göstermek için ona ihtiyacım var. –

+0

aslında bu her bir hesap için birden çok doposits bana bir çok durumda temsil eder. Diğer yandan, mevduat ve hesap arasında bire bir ilişki var. – Pramod

cevap

3

Bence bu sadece bir tasarım meselesi. user yabancı anahtar olarak kullanıcı yeterli ve temiz olacak ekleyerek, receiveaddress ile hesabı var beri, neden, aynı bilgilere sahip iki alan koyacağım, şu önermek:

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: As bir kural, model adı her zaman tekil olmalıdır

+0

Tam olarak aradığım şey bu! Çok teşekkür ederim! –