0

当我将UserProfile保存到数据库中时,

出现错误“UserProfile 没有名为性别错误的列”。

这是我的models.py

 """ UserProfile : user information """
 class UserProfile(models.Model):
     # User basic inherits : username, password, email
     user = models.OneToOneField(User)
     # Profile information
     nickname = models.CharField(max_length=63, unique=True, null=False)
     url = models.URLField(blank=True, null=True)
     birth = models.DateField(null=True) # TODO change null = false
     gender = models.CharField(max_length=15, null=False)
     nation = models.CharField(max_length=63, null=True)
     region = models.CharField(max_length=63, null=True)
     description = models.TextField(blank=True, null=True)
     # ImageField: http://goo.gl/ZQEG4e
     avatar = models.ImageField(upload_to='/avatar/')
     # Foreign Keys
     tag = models.ManyToManyField(TagCloud)

当我从./python models.py shell测试它时,我输入了

 > from UserAndPlace.models import *
 > u1 = User.objects.get(username="user1")
 > u1.username
   u'user1'
 > p1 = UserProfile(user=u1, gender="female")
 > p1.user.username
   u'user1'
 > p1.gender
   u'female'
 > p1.save()


 OperationalError                          Traceback (most recent call last)
 <ipython-input-9-e08e160cd285> in <module>()
 ----> 1 p1.save()
 ....
 OperationalError: table UserAndPlace_userprofile has no column named gender

我做了python manage.py syncdb并且还检查了python manage.py sql UserAndPlace的错误

我该如何解决这个错误?

提前感谢您的帮助。

4

2 回答 2

1

syncdb如果数据库中已存在列,则不会创建或修改列。如果您已经有了模型,然后添加了性别列,则运行syncdb不会做任何事情。

您需要删除表并重新创建它。如果您使用的是 sqlite,只需删除数据库文件并运行 syncdb。

如果您正在使用另一个数据库,请运行manage.py sqlclear yourapp,这将为您提供重置应用程序表所需执行的 SQL yourapp(确保将 yourapp 替换为具有配置文件模型的应用程序的名称)。

然后,再次运行 syncdb 以重新创建模型。

于 2014-07-19T12:02:34.750 回答
0

python manage.py syncdb在对模型进行任何更改后,您是否做过?当模型和数据库不同步时,通常会发生此错误。

于 2014-07-19T11:50:40.593 回答