Django:模型之间的引用

5

帮帮我!

我有以下两个模型:

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)

示例: 可视化

我的问题:

我希望“Deposits.user”自动引用此“receiveaddress”所属的用户。 在这个示例中,那就是TIM。我浪费了6小时来尝试解决它,我错在哪里了?

提前感谢。


你可以尝试使用类似于 user = models.ForeignKey(Account) 的代码。 - Pramod
谢谢!但是这让我可以在账户中选择任何用户,比如说-->Bob、Alice或者Tim。我需要它只显示Tim。 - gunth223 Ha
实际上,这代表了多对一的情况,每个账户会有多个存款。换句话说,存款和账户之间存在多对一的关系。 - Pramod
你是绝对正确的。 - gunth223 Ha
1个回答

3

我认为这只是一个设计问题。既然user拥有与receiveaddress相关的帐户,为什么要放置两个具有相同信息的字段呢?添加user作为外键就足够了,更加简洁。我建议采用以下方式:

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)

注意:作为惯例,模型名称应始终是单数。

这正是我在寻找的!非常感谢你! - gunth223 Ha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接