Проверка не выполняется в форме Django - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу запустить валидацию поля в моей форме, как в форме и валидации поля - с использованием валидации на практике .

Моя форма выглядит так:

from kapsule.validators import name_zero_min_length, name_max_length
class NameUpdateForm(forms.Form):

    name = forms.CharField(
        validators=[
            name_zero_min_length,
            name_max_length
        ]
    )

Мои валидаторы:

from django.core.exceptions import ValidationError


def name_zero_min_length(name_field):
    # Check minimum length
    if not len(name_field) > 0:
        print('firing zero length')
        raise ValidationError(
            "My custom error message name must be at least one character"
        )


def name_max_length(name_field):
    # Check that the name is under the max length
    MAX_LENGTH = 200
    if len(name_field) > MAX_LENGTH:
        print('raising')
        raise ValidationError(
            "My custom error message name cannot be more than {} characters".format(MAX_LENGTH)
        )

Мой взгляд такой:

def edit_kapsule_name(request, kapsule_pk):
    kapsule = Kapsule.objects.get(pk=kapsule_pk)
    form = NameUpdateForm(request.POST)

    response = {}
    print('pre-validation')
    if form.is_valid():
        print('VALID')
        name = form.data.get('name')
        kapsule.name = name
        kapsule.save(update_fields=['name'])
    else:
        print('INVALID') # INVALID
        print('json') # json
        errors = form._errors.as_json()
        print(errors) # {"name": [{"message": "This field is required.", "code": "required"}]}

Мой выводкомментарий в приведенном выше коде (недопустимый и выдающий ошибку, отличную от той, которую я ожидал).

Почему не выполняется моя пользовательская проверка?

Кажется, это соответствует проверке моей модели (работает) и второй ответ здесь

1 Ответ

0 голосов
/ 07 февраля 2019

Хорошо, в комментарии из вашего кода я вижу, что форма недействительна, и она жалуется на обязательное поле.Это может быть причиной того, что ваши валидаторы не работают, в соответствии с docs :

Метод clean () в подклассе Field отвечает за запуск to_python (), validate () и run_validators () в правильном порядке и распространяют свои ошибки.Если в какой-либо момент любой из методов вызывает ValidationError, проверка останавливается и возникает эта ошибка.Этот метод возвращает чистые данные, которые затем вставляются в словарь cleaned_data в форме.

С другой стороны, если поле является обязательным, проверка not len(name_field) > 0 не имеет особого смысла.

Попробуйте вызвать ваши валидаторы как часть clean_name метода в вашей форме.

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