Hello,
Are you using MySQL and what is the collation of your database. I am
running 1.2.1 and encountering similar problems.
My issue involves utf8_bin collation on mysql 5.1.41-3ubuntu12.3. The
issue is thus: I create a model with an ImageField and save a new
instance to my utf8_bin collated mysql backend. This instance has a
file associated with non-ascii characters in it, e.g.
"Sinéad_OConnor.jpg". Next I attempt delete the file (via the admin)
and I get a:
'ascii' codec can't decode byte 0xc3 in position 18: ordinal not in
range(128)
FYI, MySQLdb does not return unicode strings with a utf8_bin collation
set.
for a brief description of that issue see:
http://code.djangoproject.com/ticket/8340#comment:4
The traceback from my exception reveals the exception being thrown in
"django/db/models/fields/files.py" in get_prep_value (line 248).
FileField is a subclass of Field, but implements the same backend
MySQL type (varchar) as a CharField. However it seems that FileField
and CharField have completely different implementations of
get_prep_db.
Here is CharField's implementation:
def to_python(self, value):
if isinstance(value, basestring) or value is None:
return value
return smart_unicode(value)
def get_prep_value(self, value):
return self.to_python(value)
Here is Filefield's:
def get_prep_value(self, value):
"Returns field's value prepared for saving into a database."
# Need to convert File objects provided via a form to unicode
for database insertion
if value is None:
return None
return unicode(value)
My experimentations revealed that if I replace the FileField
implementation of get_prep_value with the CharField, the exception
goes away. The issue is that the default encoding is ascii and so
unicode() called on a utf8 byte str blows up. The CharField
implementation simply checks if the value is an instance of basestring
and just passes it through. This latter approach seems better to me.
As it stands, I'm inclined to think this issue is a bug.
Thanks much,
-Sam
On Jun 13, 6:22 pm, Karen Tracey <
kmtra...@gmail.com> wrote: