表 UserAndPlace_userprofile 没有名为 gender 的列

0 投票
2 回答
1274 浏览
提问于 2025-04-18 13:56

我在把UserProfile保存到数据库的时候,

出现了一个错误,提示"UserProfile没有名为gender的列错误"。

这是我的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检查了错误。

我该如何解决这个错误呢?

提前谢谢你的帮助。

2 个回答

0

你在对模型做了任何修改后,有没有运行过 python manage.py syncdb 呢?这个错误通常发生在模型和数据库不同步的时候。

1

syncdb 这个命令不会创建或修改数据库中已经存在的列。如果你已经有了模型,然后又添加了性别这一列,运行 syncdb 是不会有任何效果的。

你需要先删除这个表,然后再重新创建。如果你使用的是sqlite,只需删除数据库文件,然后再运行 syncdb

如果你使用的是其他数据库,可以运行 manage.py sqlclear yourapp,这会给你一段SQL语句,你需要执行这段语句来重置应用 yourapp 的表(记得把 yourapp 替换成你实际使用的应用名,那个应用里有个人资料模型)。

然后,再次运行 syncdb 来重新创建你的模型。

撰写回答