Enhance is_valid () с исключением - PullRequest
1 голос
/ 15 февраля 2012

У меня есть django charField, который проверяется с помощью метода is_valid (). Предполагается, что пользователь должен ввести в это поле допустимое логическое выражение, поэтому я написал метод синтаксического анализа, который вызывает исключение, если выражение неверно.

Как я могу улучшить метод is_valid (), чтобы охватить это исключение и показать пользователю сообщение об ошибке, что его запрос был неправильным?

Я читал эту статью (https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-a-specific-field-attribute), но до сих пор не знаю, как это сделать.

        try:
        job = Job(user=request.user)  # set the current user
        form = JobForm(request.POST, instance=job)

        if form.is_valid():
            form.save()
            job.execute()
            messages.success(request, u'A new job with the query "{query}" was created.'.format(query=job.query))
            return HttpResponseRedirect(reverse('job-index'))

        return self.render_to_response({'job_form': form, 'is_new': True})
    except ParseError:
        return self.render_to_response({'job_form': form, 'is_new': True})

Попробовать ... кроме блока должно быть сделано в методе is_valid (), что и является моим намерением. У кого-нибудь есть намеки?

1 Ответ

3 голосов
/ 15 февраля 2012

Вы сами ответили на вопрос - вы создаете свою собственную форму (или модель формы) и выполняете пользовательскую проверку в поле этой формы, используя метод clean_'fieldname'(),Например, скажем, ваша модель:

class Job(models.Model):
    expression_field = models.CharField(...)
    ...

, вы создаете forms.py:

class JobForm(forms.ModelForm):
    pass
    class Meta:
        model = Job 

    def clean_expression_field(self):
         # You perform your custom validation on this field in here, 
         # raising any problems
         value = self.cleaned_data['expression_field']
         if value is 'really_bad':
              raise forms.ValidationError("bad bad bad")
         return value

, а затем используете его в своем views.py, как вы уже находитесь в своемпример.Теперь, если значение, введенное пользователем, не соответствует вашим критериям, автоматически будет сгенерировано исключение

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