Django Ошибка проверки формы не отображается в шаблоне - PullRequest
0 голосов
/ 23 марта 2020

Моя проблема точно так же, как говорится в проблеме ... Я не могу заставить работать ошибки проверки формы. Я опубликую то, что я сейчас пытаюсь, ниже. Пожалуйста, дайте мне знать, как я могу изменить свой код, чтобы это работало. В настоящее время я могу даже успешно отправить форму с любым именем. Ясно, что то, что я установил в forms.py, даже не работает ...

forms.py

class PackingListForm(forms.ModelForm):
    class Meta:
        model = PackingList
        fields = ['Exporter', 'Consignee', 'Reference_Number', ... ]

    def clean_test_value(self):
        data = self.cleaned_data.get('Exporter')

        if not Exporter == 'Jeff':
            raise forms.ValidationError('ahhhh Error!')
        return data

шаблон (packlist. html)

<td rowspan="3"colspan="2">Exporter: {{ form.Exporter }}
          {% for error in form.Exporter.errors %}
            <P class='help is-danger'>{{ error }}</p>
          {% endfor %}
</td>

views.py

def PackingListView(request):
    if request.method == "POST":
        form = PackingListForm(request.POST)
        if form.is_valid():

            .....do stuff here......

        else:

            return render(request, 'packlist.html', {'form': form})

    else:
        form = PackingListForm()
        return render(request, 'packlist.html', {'form': form})

traceback

Request Method: POST
Request URL: http://127.0.0.1:8000/create/packing_list

Django Version: 1.11
Python Version: 2.7.10
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'Poseidon',
 'crispy_forms',
 'bootstrap_modal_forms']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/Library/Python/2.7/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/Library/Python/2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/Users/andrews/Desktop/WBU2/Poseidon/views.py" in PackingListView
  188.         if form.is_valid():

File "/Library/Python/2.7/site-packages/django/forms/forms.py" in is_valid
  183.         return self.is_bound and not self.errors

File "/Library/Python/2.7/site-packages/django/forms/forms.py" in errors
  175.             self.full_clean()

File "/Library/Python/2.7/site-packages/django/forms/forms.py" in full_clean
  384.         self._clean_fields()

File "/Library/Python/2.7/site-packages/django/forms/forms.py" in _clean_fields
  405.                     value = getattr(self, 'clean_%s' % name)()

File "/Users/andrews/Desktop/WBU2/Poseidon/forms.py" in clean_Exporter
  52.         if not Exporter == 'Greg':

Exception Type: NameError at /create/packing_list
Exception Value: global name 'Exporter' is not defined

1 Ответ

1 голос
/ 23 марта 2020

Поскольку имя поля равно Exporter, функция очистки должна быть clean_Exporter:

class PackingListForm(forms.ModelForm):
    class Meta:
        model = PackingList
        fields = ['Exporter', 'Consignee', 'Reference_Number']

    def <b>clean_Exporter</b>(self):
        data = self.cleaned_data.get('Exporter')

        if <b>data != 'Jeff'</b>:
            raise forms.ValidationError('ahhhh Error!')
        return data

Примечание : обычно это имя поля в Django модель написана в snake_case , а не PerlCase , поэтому она должна быть: exporter вместо Exporter.

...