Мне нужна помощь, чтобы понять, валидаторы форм Django - PullRequest
2 голосов
/ 05 августа 2010

Я прочитал документацию по Django здесь: http://docs.djangoproject.com/en/dev/ref/forms/validation/

Я также просмотрел несколько результатов поиска в Google и Stack Overflow, но я не смог ответить на мои вопросы ниже.

В качестве примера, скажем, у меня есть модель с именем "Widgets" с CharField с именем "product_name".Теперь скажите, что я хочу ограничить допустимые символы в "product_name" до [a-zA-Z0-9] плюс апострофы, тире и подчеркивания (то есть '- _) и показать пользователю ошибку формы, если они вводят запрещенный символ.

Из приведенного выше исследования я понял, что мне нужно где-то создать функцию проверки для проверки этих символов.

Мои конкретные вопросы:
1. Как лучше всего использовать такую ​​функцию проверки, как эта, в моем проекте Django?
2. Откуда мне звонить?эта функция проверки?
3. Как я могу показать ошибку пользователю, если введен «плохой» символ?
4. Кто-то будет так любезен опубликовать образец функции проверки?

Спасибо, я ценю любую помощь, которую вы можете оказать.

Ответы [ 2 ]

3 голосов
/ 05 августа 2010

Пойдите с ответом Chefsmart, если можете. Вот пример примера функции проверки в случае, если она помогает:

class MyCustomInvoiceForm(forms.Form):
    serial_number = forms.IntegerField(min_value = 1, initial = 1)
    # Other fields. I am interested in serial_number. 

    def clean_serial_number(self):
        serial_number = self.cleaned_data.get('serial_number')
        if not serial_number:
            return

        return _my_custom_validation(serial_number)

    def _my_custom_validation(self, serial_number):
        serial_number = int(serial_number)
        if not ((serial_number - 1) % 10 == 0):
            message = "Serial number should be 1 or one greater than a multiple of 10 (Example: 1, 11, 21 etc.)"
            raise forms.ValidationError(message)
        return serial_number

Это фрагмент кода из проекта, который я сделал. Заказчику потребовалась интересная логика проверки серийного номера.

2 голосов
/ 05 августа 2010

Если вы используете форму Django, у вас есть возможность использовать RegexField для поля product_name. Смотри http://docs.djangoproject.com/en/1.2/ref/forms/fields/#regexfield

Это был бы самый чистый подход для вашей ситуации.

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