Reputation: 467
my issue is exactly as the problem states...I am unable to get form validation errors to work. I will post what I am currently trying below. Please let me know how I can amend my code in order to get this working. Currently, I can even successfully submit the form with any name. So clearly what I have set in forms.py is not even working...
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
template (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
Upvotes: 1
Views: 1215
Reputation: 477533
Since the name of the field is Exporter
, the cleaning function should be clean_Exporter
:
class PackingListForm(forms.ModelForm):
class Meta:
model = PackingList
fields = ['Exporter', 'Consignee', 'Reference_Number']
def clean_Exporter(self):
data = self.cleaned_data.get('Exporter')
if data != 'Jeff':
raise forms.ValidationError('ahhhh Error!')
return data
Note: normally the name of the fields in a Django model are written in snake_case, not PerlCase, so it should be:
exporter
instead of.Exporter
Upvotes: 1