Ich portiere meine Seite nach django 1.9 und weiß nicht, wie ich dieses Problem richtig lösen kann.DjangoUnicodeDecodeError beim Aufruf von form.errors mit EmailField
In meiner Form habe ich übliche EmailField von django Formen. Wenn die Validierung fehlschlägt, sollte es eine Nachricht darüber sein (ich übergebe 'form_errors': form.errors}
an den Kontext für die Manipulation).
Aber in diesem Fall django kehrt
DjangoUnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128). You passed in ()
in django.core.validators
ein Validator für sie ist
@deconstructible
class EmailValidator(object):
message = _('Enter a valid email address.')
...
Wenn ich Nachricht alles funktioniert gut zu message = 'error'
ändern.
Also, Frage: Wie kann ich dieses Problem beheben, ohne django-Dateien zu bearbeiten?
Das Problem ist in Aufruf von form.errors, dieser Fehler zu erhöhen, auch wenn ich nur es drucken möchte. (print form.errors
). Andere Felder Fehler (IntegerField, URLField, zum Beispiel) funktioniert gut, dieses Problem ist nur für EmailField.
im Hinblick Prozess sieht aus wie das jetzt:
from django.http import JsonResponse
...
if form.is_valid():
...
else:
return JsonResponse({'form_errors': form.errors})
letzte Zurückverfolgungs ist:
File "/path/views.py", line 331, in custom_form_post
response = JsonResponse({'form_errors': form.errors})
File "/path/.env/local/lib/python2.7/site-packages/django/http/response.py", line 505, in __init__
data = json.dumps(data, cls=encoder, **json_dumps_params)
File "/usr/lib/python2.7/json/__init__.py", line 250, in dumps
sort_keys=sort_keys, **kw).encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode
return _iterencode(o, 0)
File "/path/.env/lib/python2.7/_abcoll.py", line 581, in __iter__
v = self[i]
File "/path/.env/local/lib/python2.7/site-packages/django/forms/utils.py", line 146, in __getitem__
return list(error)[0]
File "/path/.env/local/lib/python2.7/site-packages/django/core/exceptions.py", line 165, in __iter__
yield force_text(message)
File "/path/.env/local/lib/python2.7/site-packages/django/utils/encoding.py", line 88, in force_text
raise DjangoUnicodeDecodeError(s, *e.args)
DjangoUnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128). You passed in <django.utils.functional.__proxy__ object at 0x40a6a90c> (<class 'django.utils.functional.__proxy__'>)
Pl Zeigen Sie den gesamten Traceback, Ihre Ansicht und Ihre Vorlage. Beachten Sie, dass 'form.errors' bereits ein Wörterbuch ist - ich sehe nicht, warum Sie' items() 'aufrufen und dann das Ergebnis zurück in ein Wörterbuch konvertieren. – Alasdair
^aktualisiert. und Danke für Tipp über 'form.errors' - dort übersteuert :) – user1931780