Django - def __unicode__(self) 中的语法错误
我正在通过《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来配合使用。