Рассмотрим следующую ситуацию: -
Предположим, мое приложение позволяет пользователям создавать штаты / провинции в своих
страна. Просто для ясности, мы рассматриваем только символы ASCII
здесь.
В США пользователь может создать штат под названием «Техас». Если это приложение
используется внутри, скажем, пользователю все равно, если это
пишется "техас" или "Техас" или "Техас"
Но важно отметить, что система должна предотвращать создание "Техаса", если
«Техас» уже есть в базе данных.
Если модель похожа на следующую:
class State(models.Model):
name = models.CharField(max_length=50, unique=True)
Уникальность будет чувствительна к регистру в postgres; то есть postgres
позволит пользователю создавать как "Техас" и "Техас", как они
считается уникальным.
Что можно сделать в этой ситуации, чтобы предотвратить такое поведение. Как
один способ обеспечить уникальность регистра с Джанго и
Postgres
Сейчас я делаю следующее, чтобы предотвратить создание
нечувствительные дубликаты.
class CreateStateForm(forms.ModelForm):
def clean_name(self):
name = self.cleaned_data['name']
try:
State.objects.get(name__iexact=name)
except ObjectDoesNotExist:
return name
raise forms.ValidationError('State already exists.')
class Meta:
model = State
В ряде случаев мне придется выполнять эту проверку, и я не заинтересован в том, чтобы везде писать подобные точные проверки.
Просто интересно, есть ли встроенный или
лучший путь? Возможно, db_type поможет? Может быть, существует другое решение?