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 |
                        +----------+
Вернуться на верх