UnicodeDecodeError 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)

25 травня 2013 р. · 85 слів · Одна хвилина

Якщо виникла така помилка при редагуванні моделі в адмінці Django - рішення полягає тут:

from django.utils.encoding import smart_unicode

Необхідно просто обгорнути результат методу __unicode__ проблемної моделі у функцію smart_unicode.

Тобто замість:

def __unicode__(self):
    return self.title

Має бути:

def __unicode__(self):
    return smart_unicode(self.title)

А по суті, функція smart_unicode (яка тепер називається smart_text) не потрібна взагалі. Проблема полягає в тому, що self.title вже є рядком Unicode, і Python намагався неявно декодувати його у байти за допомогою ascii-кодеку.

Детальніше про цю проблему можна прочитати у цій презентації та документації.