Hãy xem xét các tình huống sau đây: -lĩnh vực mô hình độc đáo trong Django và độ nhạy trường hợp (postgres)
Giả sử ứng dụng của tôi cho phép người dùng tạo ra các bang/tỉnh trong cả nước của họ. Chỉ để rõ ràng, chúng tôi chỉ xem xét các ký tự ASCII tại đây.
Ở Hoa Kỳ, người dùng có thể tạo trạng thái có tên là "Texas". Nếu ứng dụng này đang được sử dụng trong nội bộ, giả sử người dùng không quan tâm nếu đó là viết "texas" hoặc "Texas" hoặc "teXas"
Nhưng quan trọng là hệ thống sẽ ngăn chặn việc tạo "texas" nếu "Texas" đã có trong cơ sở dữ liệu.
Nếu mô hình này là như sau:
class State(models.Model):
name = models.CharField(max_length=50, unique=True)
Sự độc đáo sẽ là trường hợp nhạy cảm trong postgres; nghĩa là, postgres sẽ cho phép người dùng tạo cả "texas" và "Texas" vì chúng là được coi là duy nhất.
Điều gì có thể được thực hiện trong tình huống này để ngăn chặn hành vi như vậy. Làm thế nào để một đi về việc cung cấp đựng pin- insenstitive độc đáo với Django và Postgres
Ngay bây giờ tôi đang làm những điều sau đây để tránh tạo ra các bản sao đựng pin- không nhạy cảm.
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
Có một số trường hợp tôi sẽ phải thực hiện kiểm tra này và tôi không muốn viết kiểm tra iexact tương tự ở mọi nơi.
Chỉ cần tự hỏi nếu có tích hợp hoặc cách tốt hơn? Có lẽ db_type sẽ giúp đỡ? Có lẽ một số giải pháp khác tồn tại?
Tôi nghĩ bạn đã làm đúng. Ít nhất đó là cách tôi làm điều đó với các thẻ, do đó, đám mây thẻ của tôi không kết thúc bằng "thẻ", "Thẻ" và "TAG" tất cả ngay bên cạnh nhau. –
Có nhưng ở đây Django được xây dựng trong độc đáo không được giúp đỡ nhiều, phải không? Sau khi tất cả tôi phải làm kiểm tra độc đáo bản thân mình ở khắp mọi nơi. – chefsmart
Tôi sẽ mã ứng dụng để đảm bảo rằng chuỗi đã nhập cơ sở dữ liệu chỉ bằng chữ thường. Sau đó kiểm tra lại. – DrBloodmoney