2015-12-17 20 views
5

Hilfe!Django: Referenz zwischen Modellen

Ich habe folgende 2 Modelle:

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) 

Beispiel: Visualization

Mein Problem:

I "Deposits.user" zu automatisch Referenz wollen, dass die Benutzer, zu dem diese 'Empfangsadresse' gehört. Im Beispiel ist das TIM. Ich habe 6 Stunden damit verbracht es herauszufinden, was mache ich falsch?

Vielen Dank im Voraus.

+0

Sie können etwas wie 'user = models.ForeignKey (Account) versuchen' – Pramod

+0

Vielen Dank! Aber das gibt mir die Möglichkeit, jeden Benutzer in Konten auszuwählen, in diesem Fall -> Bob, Alice oder Tim. Ich brauche es nur um Tim zu zeigen. –

+0

eigentlich sind das viele zu einem Fall, für jeden Account gibt es mir mehrere Dopositos. Sieh anders aus, es gibt viele Beziehungen zwischen Einzahlung und Konto. – Pramod

Antwort

3

Ich denke, es ist nur eine Designsache. Warum Sie zwei Felder setzen, die die gleichen Informationen haben, da die user Konto haben mit receiveaddress, dem Hinzufügen der Benutzer als Fremdschlüssel genug sein werden und saubere, schlage ich folgenden:

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: Wie eine Konvention, Modelle Name sollte immer Singular sein

+0

Das ist genau das, was ich gesucht habe! Ich danke dir sehr! –

Verwandte Themen