Поле регулярных выражений в Django - уникальное и без пробелов - PullRequest
0 голосов
/ 08 июля 2010

У меня есть ModelForm, в котором у меня есть CharField, который объявлен как уникальный в Model. Но у меня есть 2 проблемы:

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

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

Ответы [ 2 ]

2 голосов
/ 09 июля 2010

Вы можете сделать что-то похожее на это:

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 голосов
/ 09 июля 2010

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...