Модель отношений Джанго - PullRequest
       12

Модель отношений Джанго

1 голос
/ 08 марта 2019

Немного с трудом.

Так что в настоящее время у меня есть модель Client и модель Bank.Одним из полей в модели банка является сумма.Я рассуждал так: клиент может иметь счет в нескольких банках, а банк может иметь несколько клиентов.Следовательно -> ManyToMany.Проблема в том, что я могу указать только 1 сумму для всех учетных записей, которые есть у клиента ... Как я могу решить эту проблему?Создать другую модель?Один к одному?большое спасибо за ввод

Best,

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Есть много способов достичь этого, но может быть лучше сделать модель между Клиентом и Банком.Поэтому назовите его 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()

Что он делает, так это то, что теперь он правильно соединяет Банк и вашего Клиента с соответствующей информацией без необходимости повторениядругие данные для лучшей "нормализации".

0 голосов
/ 08 марта 2019

Вы бы хотели, чтобы произошло разделение интересов. Таким образом, с точки зрения моделей, должно быть Client, Bank и BankAccount. На клиенте нет необходимости в отношениях «многие ко многим».

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)

...