Нечувствительное к регистру уникальное ограничение Django

Я хочу, чтобы мои charField были уникальны с учетом регистра, но я не хочу хранить все в нижнем или верхнем регистре.

Существующие решения предлагают CITextField или проверку уникальности в форме, но я думал, что должен быть в состоянии сделать это с помощью UniqueConstraint, особенно с новой функцией в Django 4.0 UniqueConstrain expressions. Но с этим кодом:

class Tag(models.Model):
    title = models.CharField(max_length=24, unique=True)
    ...
    class Meta:
        ordering = ['title']
        constraints = [
            models.UniqueConstraint(
                Lower('title'),
                name='unique case insensitive title'
            ),
        ]

Я получаю эту ошибку при выполнении команды migrate. (makemigrations работает нормально)

...
  File "<project_path>/venv/lib/python3.8/site-packages/django/db/backends/sqlite3/schema.py", line 282, in _remake_table
    self.create_model(new_model)
  File "<project_path>/venv/lib/python3.8/site-packages/django/db/backends/base/schema.py", line 353, in create_model
    sql, params = self.table_sql(model)
  File "<project_path>/venv/lib/python3.8/site-packages/django/db/backends/base/schema.py", line 202, in table_sql
    constraints = [constraint.constraint_sql(model, self) for constraint in model._meta.constraints]
  File "<project_path>/venv/lib/python3.8/site-packages/django/db/backends/base/schema.py", line 202, in <listcomp>
    constraints = [constraint.constraint_sql(model, self) for constraint in model._meta.constraints]
  File "<project_path>/venv/lib/python3.8/site-packages/django/db/models/constraints.py", line 188, in constraint_sql
    fields = [model._meta.get_field(field_name) for field_name in self.fields]
  File "<project_path>/venv/lib/python3.8/site-packages/django/db/models/constraints.py", line 188, in <listcomp>
    fields = [model._meta.get_field(field_name) for field_name in self.fields]
  File "<project_path>/venv/lib/python3.8/site-packages/django/db/models/options.py", line 610, in get_field
    raise FieldDoesNotExist("%s has no field named '%s'" % (self.object_name, field_name))
django.core.exceptions.FieldDoesNotExist: NewTag has no field named 'Lower(F(title))'

Что я делаю неправильно? Возможно ли установить уникальность без учета регистра на уровне model в Django без зависимости от PostgreSQL?

В настоящее время я использую SQLite.

Вернуться на верх