【问题标题】:Model relationships Django模型关系 Django
【发布时间】:2019-07-30 19:32:25
【问题描述】:

这里有点挣扎。

所以目前我有一个模型客户和一个模型银行。 Bank 模型中的字段之一是金额。我的推理如下:一个客户可以在多个银行有一个账户,一个银行可以有多个客户。因此-> 多对多。现在的问题是,我只能为客户拥有的所有帐户指定 1 个金额......我该如何解决这个问题?创建另一个模型?一对一?非常感谢您的意见

最好的,

【问题讨论】:

    标签: django model relationship


    【解决方案1】:

    有很多方法可以实现这一点,但最好在客户和银行之间建立一个模型。所以称它为 BankAccount,无论如何它都是你真正想要表示的,它可能看起来像:

    class BankAccount(models.Model):
        client = models.ForeignKey(Client, on_delete=models.CASCADE)
        bank = models.ForeignKey(Bank, on_delete=models.CASCADE)
        amount = models.PositiveIntegerField()
        date_opened = models.DateField()
    
    

    这样做现在可以将银行和您的客户与相关信息正确连接起来,而无需重复其他数据以实现更好的“规范化”。

    【讨论】:

    • 嗨威廉!谢谢...您认为我还需要包括银行和客户之间的关系吗?谢谢
    • 不,因为你已经“通过”了这个。无论哪种方式,在您考虑它时,以人类的方式,您应该询问银行帐户它属于哪个银行,而不是直接 joe。所以像bankaccount.bank 或者在这种情况下client.bankaccount.bank 这样的东西应该告诉你。
    【解决方案2】:

    您会希望有一个关注点分离。所以在型号方面,应该有ClientBankBankAccount。 Client 上不需要多对多关系。

    class Client(models.Model):
        name = models.CharField()
    
    
    class Bank(models.Model):
        name = models.CharField()
    
    
    class BankAccount(models.Model):
        CHECKING = 'C'
        SAVINGS = 'S'
    
        TYPE = (
            (CHECKING, 'Checking'),
            (SAVINGS, 'Savings'),
        )
    
        client = models.ForeignKey(Client, related_name="bankAccountAsClient", on_delete=models.CASCADE)
        bank = models.ForeignKey(Bank, related_name="bankAccountAsBank", on_delete=models.CASCADE)
        amount = models.DecimalField(max_digits=8, decimal_places=2)
        type = models.CharField(max_length=1, choices=TYPE)
    

    这样,您可以使用BankAccount.objects.filter(client=client)获取客户的银行账户

    【讨论】:

    • 这个多对多的关系;您刚刚在链接客户和银行的中间表中添加了一些额外的字段。
    • @EndreBoth 是的,我的意思是他不需要Client 上的多线程,因为他需要额外的字段。谢谢你的澄清
    • 确实如此。我忽略了“在客户端”,抱歉。
    • @EndreBoth 不道歉!我根据您的评论编辑了我的答案以澄清。非常感谢您的澄清。
    • 嗨 Hybrid & Endre - 你也有同样的问题.. .. 你认为我还需要包括银行和客户之间的关系吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 2017-01-24
    • 2019-09-19
    • 2020-11-01
    • 2011-02-15
    • 2016-09-22
    相关资源
    最近更新 更多