2014-09-27 1 views
0

У меня возникли проблемы при переносе моего проекта django в heroku. Я получаю сообщение об ошибке ниже, когда выполняю запуск jailku python manage.py syncdb, а затем набираю суперпользователя и пароль.Ошибка Django с TypeError: должен быть unicode не str

File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/text.py", line 409, in slugify 
    value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii') 
TypeError: must be unicode, not str 

мой models.py

from django.db import models 
from django.db.models.signals import post_save 
from django.conf import settings 
from django.contrib.auth.models import User 
from autoslug import AutoSlugField 


# Create your models here. 
class Profile(models.Model): 
    account = models.OneToOneField(User, unique=True) 
    name = models.CharField(max_length = 120, null=True, blank=True) 
    location = models.CharField(max_length = 120, null=True, blank=True) 
    website = models.CharField(max_length = 120, null=True, blank=True) 
    bio = models.CharField(max_length = 120, null=True, blank=True) 
    timestamp = models.DateTimeField(auto_now = False, auto_now_add=True) 
    updated_timestamp = models.DateTimeField(auto_now = True, auto_now_add=False) 
    slug = AutoSlugField(populate_from="account") 

    @models.permalink 
    def get_absolute_url(self): 
     return ('view_profile', None, {'username': self.account.username}) 

    def __unicode__(self): 
     return str(self.account.username) 

# here is the profile model 
def user_post_save(sender, instance, created, **kwargs): 
    """Create a user profile when a new user account is created""" 
    if created == True: 
     p = Profile() 
     p.account = instance 
     p.save() 

post_save.connect(user_post_save, sender=User) 

ответ

2

Вы пытаетесь использовать AutoSlugField на поле отношения. Вы можете только AutoSlugField атрибутов, возвращающих текст, а не другого экземпляра модели. Создайте свойство, которое возвращает какой элемент пользователя вы slugify:

class Profile(models.Model): 
    slug = AutoSlugField(populate_from="_accountname") 
    # [....] 

    @property 
    def _accountname(self): 
     return self.account.username 

На отдельной ноте: ваш __unicode__ метод необходимо вернуть unicode объект, но ваш возвращает str объект вместо:

def __unicode__(self): 
    return str(self.account.username) 

Снимите str() вызов:

def __unicode__(self): 
    return self.account.username 
2

Попробуйте изменить функцию Юникода на модели профиля к следующему:

def __unicode__(self): 
    return u'%s' % self.account.username 
+0

'self.account.username' является * а lready * значение unicode. И если это не так, вы можете просто использовать 'unicode (self.account.username)'. –

+0

Я пробовал это, это не сработало. Я попробую ответить от @MartijnPieters – cloudviz

+0

@cloudviz: вы не включили всю свою трассу, поэтому мне пришлось сделать некоторые догадки; Пьер сделал тоже и не догадался правильно. Извлеченный урок: включить в следующий раз всю трассировку. –