我将 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
检查错误如何修复此错误?
提前感谢您的帮助。
答案 0 :(得分:1)
syncdb
将不会创建或修改列。如果您已经拥有该模型,然后添加了性别列,则运行syncdb
将无法执行任何操作。
您需要删除该表并重新创建它。如果您使用的是sqlite,只需删除数据库文件并运行syncdb。
如果您正在使用其他数据库,请运行manage.py sqlclear yourapp
,这将为您提供执行以重置应用程序yourapp
的表所需的SQL(确保使用名称替换yourapp具有配置文件模型的应用程序。)
然后,再次运行syncdb以重新创建模型。
答案 1 :(得分:0)
在对模型进行任何更改后,您是否完成了python manage.py syncdb
?当模型和数据库不同步时,通常会发生此错误。