Wenn ich versuche, eine Datei mit russischen Symbolen im Namen zur Modellinstanz über die Standardmethode instance.file_field.save hinzuzufügen, erhalte ich einen UnicodeDecodeError (ascii decoding error, not in range (128)) vom Speicher-Backend (stacktrace endete auf os.exist). Wenn ich diese Datei über das Standard-Python-Datei-öffnen/schreiben schreibe, ist alles in Ordnung. Alle Dateinamen sind in utf-8. Ich bekomme diesen Fehler nur beim Testen von Gentoo, auf meiner Ubuntu-Workstation funktioniert alles einwandfrei.
class Article(models.Model):
file = models.FileField(null=True, blank=True, max_length = 300,
upload_to='articles_files/%Y/%m/%d/')
Traceback:
File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py" in get_response
100. response = callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python2.6/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
24. return view_func(request, *args, **kwargs)
File "/var/www/localhost/help/wiki/views.py" in edit_article
338. new_article.file.save(fp, fi, save=True)
File "/usr/lib/python2.6/site-packages/django/db/models/fields/files.py" in save
92. self.name = self.storage.save(name, content)
File "/usr/lib/python2.6/site-packages/django/core/files/storage.py" in save
47. name = self.get_available_name(name)
File "/usr/lib/python2.6/site-packages/django/core/files/storage.py" in get_available_name
73. while self.exists(name):
File "/usr/lib/python2.6/site-packages/django/core/files/storage.py" in exists
196. return os.path.exists(self.path(name))
File "/usr/lib/python2.6/genericpath.py" in exists
18. st = os.stat(path)
Exception Type: UnicodeEncodeError at /edit/
Exception Value: ('ascii', u'/var/www/localhost/help/i/articles_files/2010/03/17/\u041f\u0440\u0438\u0432\u0435\u0442', 52, 58, 'ordinal not in range(128)')
0 Stimmen
Es könnte hilfreich sein, Ihre Modelldefinition zu sehen.
0 Stimmen
Es ist die übliche Klasse Article(models.Model): ... file = models.FileField(null=True, blank=True, max_length = 300, upload_to='articles_files/%Y/%m/%d/')
0 Stimmen
Ein vollständiger Traceback wäre ebenfalls hilfreich.
0 Stimmen
Ich denke, dass das Problem in os Unterschied, auf allen meinen ubuntu Workstation alles funktioniert gut.
0 Stimmen
Vollständiger Stacktrace auf meinem Büro-PC, aber er ist in diesem Fall nicht so hilfreich (ich rufe die Speichermethode auf, sie ruft die Speichermethode auf, ich werde sie morgen posten).
0 Stimmen
Toller Fund, ich habe heute etwa 2h verloren, bis ich diesen Thread gefunden habe.