Django - def __unicode__(self) 中的语法错误

3 投票
1 回答
3985 浏览
提问于 2025-04-18 06:51

我正在通过《djangobook》学习Django,在第六章中安装了管理应用程序,结果在models.py文件中运行syncdb命令时出现了语法错误,错误的代码是return u'%s %s' % (self.first_name, self.last_name)

我使用的是Python 3。

为什么会出现这个问题?怎么解决呢?

models.py:

from django.db import models

class Publisher (models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website=models.URLField()

    def __unicode__(self):
        return self.name

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()

    def __unicode__(self):
        return u'%s %s' % (self.first_name, self.last_name)

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

    def __unicode__(self):
        return self.title

错误信息:

  File "C:\Users\ken\Desktop\NightHawk\Hawk\books\models.py", line 20
    return u'%s %s' % (self.first_name, self.last_name)
                  ^
SyntaxError: invalid syntax

1 个回答

6

你在用Python 3的时候,写的代码却是Python 2的语法。虽然从Python 3.3开始,可以用u这个前缀来表示unicode字符串(这样可以让不同版本的代码兼容),但在Python 3.2及之前的版本是不支持的;所以你需要去掉u前缀才能让代码正常运行:

def __unicode__(self):
    return '%s %s' % (self.first_name, self.last_name)

不过,你还需要查看Django的迁移到Python 3的文档,并在这里使用__str__,而不是__unicode__

def __str__(self):
    return '%s %s' % (self.first_name, self.last_name)

如果你在跟随某本特定的书籍学习,可能需要安装Python 2来配合使用。

撰写回答