Django:转换为Postgres数据库时缺少配置文件表

时间:2012-07-05 16:39:13

标签: python django postgresql

我有一个问题,我希望有见识的人可以帮助。我的第一个Django项目即将完成,我正在转向Postgres数据库,期待通过Heroku部署。这个过程进行得非常顺利,直到我运行python manage.py syncdb。

django.db.utils.DatabaseError: relation “report_userprofile” does not exist
LINE 1: INSERT INTO “report_userprofile” (“user_id”, “first_name”, “…

显然,它没有为UserProfile模型创建数据库表。我在尝试运行服务器时遇到此异常:

Exception Type: DoesNotExist at /accounts/login/
Exception Value: Site matching query does not exist.

我正在为该项目使用的其他应用程序是django-profiles,我设置了一些显然很常见的问题。 “失踪手册”网站 - http://birdhouse.org/blog/2009/06/27/django-profiles/ - 帮助解决了这些问题,但可能导致了当前的问题。

我在那里推荐使用signals.post_save.connect(create_profile,sender = User)。我正在研究可能出现问题的地方,并在Google网上论坛上发布了这篇文章并回答说“如果你在用户上使用post_save信号就不能这样做,因为它会导致竞争条件。”我是想知道这是否可能导致问题,显然,最好解决它并将这些表放入新数据库并运行。

非常感谢任何有关如何解决此问题的见解。

这是可能导致问题的数据库模型:

class UserProfile(models.Model):
user = models.OneToOneField(User, unique=True, related_name="profile")
first_name = models.CharField(max_length=25)
last_name = models.CharField(max_length=35)
email = models.EmailField()
birth_date = models.DateField(blank=True, null=True)
city = models.CharField(max_length=25)
state = models.CharField(max_length=20)
zip_code = models.CharField(max_length=10)
profile_pic = models.ImageField(upload_to='profilepictures', blank=True)

def __unicode__(self):
    return " %s" % (self.user)

def get_absolute_url(self):
    return ('profiles_profile_detail', (), { 'username': self.user.username })
get_absolute_url = models.permalink(get_absolute_url)
signals.post_save.connect(create_profile, sender=User)

1 个答案:

答案 0 :(得分:1)

这里似乎有点可疑:

INSERT INTO “report_userprofile” (“user_id”, “first_name”, “…

这两个字段是本机用户模型上的字段,而不是自定义配置文件模型上的字段。为什么要尝试将这些字段插入您的个人资料表?

你有没有更多代码在这里显示?

环顾四周,我看到了一些有趣的替代方法来自动创建个人档案记录:

http://djangosnippets.org/snippets/500/ http://www.turnkeylinux.org/blog/django-profile

但我知道您使用的技术(在Birdhouse上列出)对我建立的每个Django网站都有效,所以我并不特别怀疑。