模型关系Django

时间:2019-03-08 18:12:11

标签: django model relationship

在这里有些挣扎。

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

最佳,

2 个答案:

答案 0 :(得分:0)

您希望将关注点分离。因此,在模型方面,应该有ClientBankBankAccount。不需要与客户建立多对多关系。

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)

获取客户的银行帐户

答案 1 :(得分:0)

有很多方法可以实现这一目标,但是最好在客户和银行之间建立模型。因此,将其命名为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()

它的作用是现在可以正确地将银行和您的客户与相关信息连接起来,而不必重复其他数据以实现更好的“规范化”。