Взаимосвязь внешних ключей на втором уровне
Предположим, у меня есть три модели, такие как -
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 также должны быть уникальными вместе.