表UserAndPlace_userprofile没有名为gender的列

时间:2014-07-19 10:35:48

标签: python django django-models django-syncdb syncdb

我将 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

检查错误

如何修复此错误?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

如果列已存在于数据库中,则

syncdb将不会创建或修改列。如果您已经拥有该模型,然后添加了性别列,则运行syncdb将无法执行任何操作。

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

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

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

答案 1 :(得分:0)

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