Нечувствительное к регистру уникальное ограничение 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.