UnicodeEncodeError при доступе к БД в администраторе django

При попытке доступа к базе данных через администратора я получаю эту ошибку

UnicodeEncodeError в /admin/nota_app/demographic/

Exception Type: UnicodeEncodeError
Exception Value: 'ascii' codec can't encode character u'\x8e' in position 0: ordinal not in range(128)

Это то, что моя модель:

@python_2_unicode_compatible
class Demographic(models.Model):
    status = models.CharField(max_length = 100)
    region = models.CharField(max_length = 50)
    ...

И я сохраняю объекты таким образом:

new_demographic = Demographic(
            status = smart_unicode(my_dict[i]['status']),
            region = smart_unicode(my_dict[i]['network']),
            ...
        )            
        new_demographic.save()

Я также пытался использовать unicode() а также encode('utf-8') методы, но, к сожалению, они не дали никакого эффекта. Может кто-нибудь помочь мне с обходным путем для этого?

Это полная трассировка:

UnicodeEncodeError at /admin/nota_app/demographic/
'ascii' codec can't encode character u'\x8e' in position 0: ordinal not in range(128)
Request Method: GET
Request URL:    http://127.0.0.1:8000/admin/nota_app/demographic/
Django Version: 1.7.9
Exception Type: UnicodeEncodeError
Exception Value:    
'ascii' codec can't encode character u'\x8e' in position 0: ordinal not in range(128)
Exception Location: C:\Users\KESHAV\Desktop\StackQueue\nota\nota_app\models.py in __str__, line 87
Python Executable:  C:\Users\KESHAV\Desktop\StackQueue\Scripts\python.exe
Python Version: 2.7.10
Python Path:    
['C:\\Users\\KESHAV\\Desktop\\StackQueue\\nota',
 'C:\\Windows\\system32\\python27.zip',
 'C:\\Users\\KESHAV\\Desktop\\StackQueue\\DLLs',
 'C:\\Users\\KESHAV\\Desktop\\StackQueue\\lib',
 'C:\\Users\\KESHAV\\Desktop\\StackQueue\\lib\\plat-win',
 'C:\\Users\\KESHAV\\Desktop\\StackQueue\\lib\\lib-tk',
 'C:\\Users\\KESHAV\\Desktop\\StackQueue\\Scripts',
 'C:\\Python27\\Lib',
 'C:\\Python27\\DLLs',
 'C:\\Python27\\Lib\\lib-tk',
 'C:\\Users\\KESHAV\\Desktop\\StackQueue',
 'C:\\Users\\KESHAV\\Desktop\\StackQueue\\lib\\site-packages']
Server time:    Wed, 6 Jan 2016 16:28:48 +0000

1 ответ

Решение

Если вы используете @python_2_unicode_compatibleтогда ваш __str__ Метод должен возвращать строку Unicode.

У вас есть str(self.region+", "+self.country), который пытается преобразовать строку Unicode в строку байтов в Python 2. Чтобы исправить проблему, измените метод на:

def __str__(self):
    return self.region + u"," + self.country
Другие вопросы по тегам