2015-12-17 24 views
5

Pomoc!Django: Odniesienie między modelami

mam następujące 2 modele:

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) 

Przykład: Visualization

Mój problem:

chcę "Deposits.user" do automatycznie odsyłającym użytkownika, do którego należy ten "adres odbiorczy". W tym przykładzie jest to TIM. Zmarnowałem 6 godzin, próbując to rozgryźć, co robię źle?

Z góry dziękuję.

+0

Możesz wypróbować coś w stylu 'user = models.ForeignKey (Konto)' – Pramod

+0

Dzięki! Ale to daje mi możliwość wyboru dowolnego użytkownika na kontach, w tym przypadku -> Bob, Alice lub Tim. Potrzebuję go tylko do pokazania Tima. –

+0

faktycznie to reprezentuje wiele do jednego przypadku, dla każdego konta będzie mnie wiele doposów. Spójrz w inny sposób, istnieje wiele do jednej relacji między depozytem a kontem. – Pramod

Odpowiedz

3

Myślę, że to "tylko kwestia projektowania. Dlaczego można umieścić dwa pola, które mają te same informacje, ponieważ user ma konto z receiveaddress, dodając użytkownik jako klucz obcy będzie wystarczające i czystsze, proponuję następujące:

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: Jak Konwencja, nazwa modelu powinna być zawsze pojedyncza.

+0

Właśnie tego szukałem! Dziękuję bardzo! –

Powiązane problemy