2013-05-27 2 views
1

Я получил забавную ошибку, когда я пытаюсь удалить пользователя из администратора страниц (Django 1.5):Джанго: AttributeError при попытке удалить пользователя

AttributeError at /admin/teaching/student/5/delete/

'tuple' object has no attribute 'replace'

затем долгое TraceBack я не понимаю, заканчивая жалобой

line 43 in .../site-packages/django/utils/html.py in escape: 
return mark_safe(force_text(text).replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;').replace('"', '&quot;').replace("'", '&#39;')) 

text, но это просто строка: Error in formatting: coercing to Unicode: need string or buffer, tuple found. Итак, force_text возвращает кортеж? Что это касается моих моделей? Я смущен.

Мои пользователи - студенты, и каждая модель Студента имеет OneToOneField с моделью пользователя, поэтому я думаю, что соответствующий объект Student также должен быть удален. Я могу удалить пользователя из оболочки без каких-либо проблем (и объект Student также исчезнет).

Edit: вот Student модель:

class Student(models.Model): 
    user = models.OneToOneField(User) 
    start_year = models.IntegerField() 
    name = models.CharField(max_length=100) 
    token = models.CharField(max_length=20, blank=True, null=True) 

    def __unicode__(self): 
     return self.name, 

    def user_email(self): 
     return self.user.email 
+0

У вас есть какая-либо админ-форма или какая-то переоценка? Это (смешная/боль в ...) ошибка действительно :) –

+0

Ничего особенного, я не думаю. Модель Student имеет метод '__unicode__', который возвращает' self.name' и метод 'user_email', который возвращает' self.user.email' для 'StudentAdmin'' list_display'. Единственное, что, я думаю, могло бы сделать другое - вручную добавить поле «токен» в таблицу базы данных модели Student (но я запустил manage.py syncdb OK). – xnx

+1

Можете ли вы опубликовать модель «Студент», чтобы узнать, есть ли там что-то не так? –

ответ

5

пятнистый! Если это не опечатка, конечная запятая в вашем возвратном предложении __unicode__ заставит ее вернуть tuple, так что это ошибка, которую вы получаете.

def __unicode__(self): 
    # note the tralining comma 
    #return self.name, 
    #should be like this (no comma) 
    return self.name 

Надеюсь, что это сработает!

Смежные вопросы