Взаимосвязь внешних ключей на втором уровне

Предположим, у меня есть три модели, такие как -

class company(models.Model):
    companyName = models.charField()

class branch(models.Model):
    branchName = models.charField()
    company = models.ForeignKey(company, on_delete=models.CASCADE)

Теперь в третьей модели, то есть customer я хочу иметь уникального клиента для каждой компании, поэтому я сделал -

class customers(models.Model):
    customerName = models.charField()
    branch= models.ForeignKey(branch, on_delete=models.CASCADE)
    company = models.ForeignKey(company, on_delete=models.CASCADE)

    class Meta:
        unique_together = (
            ('company', 'customerName'),
        )

Теперь, поскольку филиал уже имеет компанию в качестве внешнего поля и я снова использую и branch и компанию в модели customers, сформирует ли это циклическую структуру, или это неправильный способ сделать это?

А если я удалю company из модели customers, потому что branch уже имеет company в качестве внешнего поля, как я могу установить уникальных клиентов для каждой компании на уровне базы данных?

Это не должно создавать циклическую структуру, но вам не нужно company в качестве атрибута.

Вы можете получить доступ к company через внешний ключ branch. Это должно сработать:

class customers(models.Model):
    customerName = models.charField()
    branch= models.ForeignKey(branch, on_delete=models.CASCADE)

    class Meta:
        unique_together = (
            ('branch__company', 'customerName'),
        )

Хотя, теоретически, филиал и customerName также должны быть уникальными вместе.

Вернуться на верх