MySQL 8.0.27 не принимает контрольные ограничения django
Я видел вопрос двухлетней давности похожий на этот , но в вопросе не была указана версия MySQL и нет ответов на вопрос.
Я использую django constraint API для создания модели, которая имеет 2 внешних ключа, но оба они не могут существовать вместе и оба не могут быть null одновременно. Ограничения выглядят примерно так:
CheckConstraint(check=Q(type='campaign', campaign__isnull=False), name='check_campaign_data'),
CheckConstraint(check=Q(type='trigger', trigger__isnull=False), name='check_trigger_data'),
Тип указывает, какой внешний ключ будет использоваться в модели.
Однако на моей консоли появляется следующее предупреждение:
(models.W027) MySQL does not support check constraints.
HINT: A constraint won't be created. Silence this warning if you don't care about it.
Я видел, что теперь это поддерживается для MySQL 8.0.16 или выше.
Вот вывод mysql --version в моем терминале:
mysql Ver 8.0.27 for Linux on x86_64 (MySQL Community Server - GPL)
Почему это не работает, если эта версия MySQL должна поддерживать эту функцию?
Я сделал то, что предложил Bill karwin, и увидел, что Check Constraint действительно создан и работает, как ожидалось, даже с предупреждением. Чтобы проигнорировать предупреждение, я просто добавил следующее в свой settings.py:
SILENCED_SYSTEM_CHECKS = ["models.W027"]