2010-07-08 3 views
0

У меня есть ModelForm, в котором у меня есть CharField, который объявлен уникальным в Модели. Но у меня есть 2 проблемы:Django regex field - уникальное и без пробелов

  1. Если я заполнить форму с полем, имеющий такое же имя, я не получаю сообщение об ошибке.
  2. Я бы хотел, чтобы это поле не содержало пробелов.

Можно ли это сделать с помощью ModelForm?

ответ

2

Вы можете сделать что-то близкое к этому:

class MyModelForm(forms.ModelForm): 
    # your field definitions go here 

    def clean_myuniquefield(self): 
     # strip all spaces 
     data = str(self.cleaned_data['myuniquefield']).replace(' ', '') 
     model = self._meta.model 
     # check if entry already exists 
     try: 
      obj = model.objects.get(myuniquefield=data) 
     except model.DoesNotExist: 
      return data 
     raise forms.ValidationError("Value already exists!") 
2

Чтобы избавиться от пробелов, сделайте clean_ fieldname функция для разделения пробелов.

http://docs.djangoproject.com/en/dev/ref/forms/validation/#ref-forms-validation

Что касается уникальности, а также заметки о мета-поля unique_together. Я не знаю, нужна ли вам это, но я не знал об этом, пока не окопался.

Если вам действительно нужно выполнить проверку уникальности перед попыткой добавления и отказа, вы также можете сделать это в функции clean_ *. Тем не менее, было бы лучше предположить, что база данных позаботится об этом и потерпит неудачу стандартным образом, и правильно настроит ваши сообщения об ошибках. Таким образом, если вы измените ограничения позже, он будет проходить через более легко. И если другие должны поддерживать ваш код, это будет более стандартным.

Надеюсь, это поможет.

+0

Спасибо большое, я попробую! – dana