2015-12-17 7 views
5

Help!Django: Riferimento tra i modelli

ho i seguenti 2 modelli:

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) 

Esempio: Visualization

Il mio problema:

voglio "Deposits.user" per automaticamente riferimento utente a cui appartiene questo 'receiveaddress'. Nell'esempio, è TIM. Ho perso 6 ore cercando di capirlo, cosa sto sbagliando?

Grazie in anticipo.

+0

Puoi provare qualcosa come 'utente = modelli.ForeignKey (Account)' – Pramod

+0

Grazie! Ma questo mi dà la possibilità di selezionare qualsiasi utente negli account, in questo caso -> Bob, Alice o Tim. Ne ho bisogno per mostrare solo Tim. –

+0

in realtà questo rappresenta da un caso all'altro, per ogni account ci sono più doposits. Guarda in altro modo, c'è una relazione tra deposito e account. – Pramod

risposta

3

Penso che sia solo una questione di design. Perché mettere due campi che hanno le stesse informazioni, dal momento che la user ha account con receiveaddress, aggiungendo l'utente come chiave esterna sarà sufficiente e più pulito, suggerisco il seguente:

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: una convenzione, il nome del modello deve essere sempre singolare

+0

Questo è esattamente quello che stavo cercando! Grazie mille! –