는 다음과 같은 상황을 생각해 보자. 명확성을 위해 ASCII 문자 인 만 있습니다.고유 모델 필드와 대소 문자 구분 (포스트 그레스)
미국에서는 사용자가 "텍사스"라고하는 상태를 만들 수 있습니다. 이 응용 프로그램 가 내부적으로 사용하는 경우, 그것은 이 경우 "텍사스"또는 "텍사스"또는 "텍사스"
그러나 중요한 것은 시스템이 "텍사스"의 생성을 방지한다 철자 경우의 사용자가 신경 쓰지 않는 가정 해 봅시다 "Texas"가 이미 데이터베이스에 있습니다.
모델이 같은 경우 다음
class State(models.Model):
name = models.CharField(max_length=50, unique=True)
대소 문자를 구분 포스트 그레스에있을 것 고유성; 즉, 포스트 그레스 은 사용자가이 고유하다고 간주하므로 "텍사스"와 "텍사스"를 모두 만들 수 있습니다.
이러한 상황을 방지하기 위해 수행 할 수있는 작업은 다음과 같습니다. 지금 나는 대소 를 구분 중복 생성을 방지하기 위해 다음과 같은 일을 해요
장고와 insenstitive 고유성과 포스트 그레스를 소문자 제공에 대해 한 가지를 수행하는 방법.
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
나는이 검사를해야 할 경우가 많으며 비슷한 iexact 검사를 사방에 작성하지 않아도되는 경우가 많습니다.
더 좋은 방법으로 내장 또는 이 있는지 궁금하십니까? 아마도 db_type이 도움이 될까요? 어쩌면 다른 해결책이 있을까요?
을 당신이 이미 바로 그 일을하고 생각합니다. 적어도 그것이 태그를 사용하는 방식이므로 내 태그 클라우드는 서로 "태그", "태그"및 "태그"로 끝나지 않습니다. –
네,하지만 여기 장고의 고유 한 내장은별로 도움이되지 않습니까? 결국 나는 어디에서나 유일한 수표를해야만한다. – chefsmart
문자열을 데이터베이스에 소문자로 입력하도록 앱을 코딩 할 것입니다. 그런 다음에 대해 확인하십시오. – DrBloodmoney