Django добавляет ограничение для соответствия полей внешнего ключа
В Django у меня есть модель, которая связывает арендатора с объектом (домом). Арендатор и объект должны находиться в одном и том же месте (городе), чтобы эта связь была действительной. Для обеспечения этого я хочу добавить ограничение, которое проверяет, совпадают ли сайт арендатора и сайт объекта.
Я пытался добавить CheckConstraint
в модель, но это компилируется в миграцию, которая всегда ложна.
Модель:
class TenantInFacility(models.Model):
tenant = models.ForeignKey(Tenant, on_delete=models.DO_NOTHING)
facility = models.ForeignKey(Facility, on_delete=models.DO_NOTHING)
percentage_used = models.DecimalField(default=100, max_digits=6, decimal_places=3)
start = models.DateTimeField(default=datetime.datetime.fromtimestamp(0))
end = models.DateTimeField(default=None, blank=True, null=True)
class Meta:
verbose_name_plural = "tenants in facilities"
constraints = [
models.CheckConstraint(check=models.Q(models.F("tenant__site") == models.F("facility__site")),
name='tenant_facility_sites_match')
]
def __str__(self):
return self.tenant.site.name + ": " + self.tenant.name + " in " + self.facility.name
Миграция:
operations = [
migrations.AddConstraint(
model_name='tenantinfacility',
constraint=models.CheckConstraint(check=models.Q(False), name='tenant_facility_sites_match'),
),
]
Есть ли в Django способ потребовать, чтобы внешний ключ внешнего ключа совпадал с внешним ключом другого внешнего ключа.
В виде диаграммы:
+----------+
| Tenant |
+----------+
/ \
/ \
+--------------------+ +------+
| Tenant in Facility | | Site |
+--------------------+ +------+
\ /
\ /
+----------+
| Facility |
+----------+