1

当我尝试从管理页面(Django 1.5)中删除用户时,我遇到了一个有趣的错误:

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返回一个元组吗?这跟我的模型有什么关系?我很困惑。

我的用户是学生,每个 Student 模型都有一个带有 User 模型的 OneToOneField,所以我猜相应的 Student 对象也必须被删除。我可以毫无问题地从 shell 中删除用户(学生对象也消失了)。

编辑:这是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
4

1 回答 1

5

斑!如果不是拼写错误,则__unicode__return 子句中的尾随逗号会使其返回 a tuple,这就是您遇到的错误。

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

希望这有效!

于 2013-05-27T16:21:24.837 回答