表 UserAndPlace_userprofile 没有名为 gender 的列
我在把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
来重新创建你的模型。