【发布时间】:2019-07-30 19:32:25
【问题描述】:
这里有点挣扎。
所以目前我有一个模型客户和一个模型银行。 Bank 模型中的字段之一是金额。我的推理如下:一个客户可以在多个银行有一个账户,一个银行可以有多个客户。因此-> 多对多。现在的问题是,我只能为客户拥有的所有帐户指定 1 个金额......我该如何解决这个问题?创建另一个模型?一对一?非常感谢您的意见
最好的,
【问题讨论】:
标签: django model relationship
这里有点挣扎。
所以目前我有一个模型客户和一个模型银行。 Bank 模型中的字段之一是金额。我的推理如下:一个客户可以在多个银行有一个账户,一个银行可以有多个客户。因此-> 多对多。现在的问题是,我只能为客户拥有的所有帐户指定 1 个金额......我该如何解决这个问题?创建另一个模型?一对一?非常感谢您的意见
最好的,
【问题讨论】:
标签: django model relationship
有很多方法可以实现这一点,但最好在客户和银行之间建立一个模型。所以称它为 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()
这样做现在可以将银行和您的客户与相关信息正确连接起来,而无需重复其他数据以实现更好的“规范化”。
【讨论】:
bankaccount.bank 或者在这种情况下client.bankaccount.bank 这样的东西应该告诉你。
您会希望有一个关注点分离。所以在型号方面,应该有Client、Bank、BankAccount。 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)获取客户的银行账户
【讨论】:
Client 上的多线程,因为他需要额外的字段。谢谢你的澄清