У меня есть следующие модели:
class Container(models.Model):
...
class Meta:
constraints = [
models.CheckConstraint(
check=~Q(elements=None),
name='container_must_have_elements'
),
]
class Element(models.Model):
container = models.ForeignKey(Container),
related_name='elements',
on_delete=models.CASCADE
)
Я хочу применить ограничение, согласно которому каждый объект Container
должен иметь хотя бы один Element
, ссылающийся на него через отношение внешнего ключа.
Как видите, я уже добавил проверочное ограничение. Однако оператор отрицания ~
на объекте Q
представляется запрещенным. Я получаю django.db.utils.NotSupportedError: cannot use subquery in check constraint
, когда пытаюсь применить сгенерированную миграцию.
Без оператора отрицания ограничение кажется действительным (оно не выполняется только из-за ошибки целостности данных).
Есть ли иначе я могу express это ограничение, чтобы оно поддерживалось CheckConstraint
? (Например, есть ли способ проверить, не является ли набор elements
не пустым?)