【问题标题】:Django South is not creating a table for user_profilesDjango South 没有为 user_profiles 创建表
【发布时间】:2013-10-28 23:01:53
【问题描述】:

我想重置我的 Django 项目的数据库,所以我做了以下步骤:

  1. 删除了我的 SQLite 数据库
  2. python manage.py syncdb
  3. python manage.py migrate users --fake

创建新帐户并登录后,我收到以下错误消息:

no such table: users_userprofile

这是我的用户 model.py 的样子:

class UserProfile(models.Model):
  user = models.OneToOneField(User)
  joined_goals = models.ManyToManyField(Goal, related_name="joined_goals")
  followingGoals = models.ManyToManyField(Goal, related_name="following_goals")

  def __unicode__(self):
    return self.user.username

  def get_goals(self):
    try:
      goals = Goal.objects.filter(user=self.user)
      return goals
    except Goal.DoesNotExist:
      return []

def create_user_profile(sender, instance, created, **kwargs):
    if created:
      userProfile = UserProfile.objects.create(user=instance)

post_save.connect(create_user_profile, sender=User)

所以,有一个 UserProfile 类,但 South 似乎没有制作表格来保存用户配置文件。当我做python manage.py schemamigration users --auto 时,它说似乎没有任何改变。如何获取它来创建 userprofiles 表?

【问题讨论】:

  • 你为什么使用--fake?这实际上并没有进行迁移...
  • 旁注:您的 get_goals 函数永远不会引发 DoesNotExist 异常。如果没有匹配的目标,你只会得到一个空的查询集。
  • 你运行./manage.py convert_to_south users了吗?在尝试生成架构迁移之前,您可能需要这样做
  • 当我执行 convert_to_south 用户时,我收到此错误:此应用程序已由 South 管理。

标签: python django django-south


【解决方案1】:

我遇到了同样的问题。事实证明,使用 South 时存在某种循环依赖。要解决此问题,请不要在运行 syncdb 时创建超级用户,而是运行:

python manage.py createsuperuser

在您使用 syncdb 创建数据库之后。至此,你的profile表就创建好了,post_save信号就会成功。

【讨论】:

    【解决方案2】:

    尝试在没有 --fake 选项的情况下迁移表。如果您在数据库中应用了更改但在 south_migrationhistory 表中没有应用,则 Fake 非常有用。

    【讨论】:

    • 我在尝试迁移用户时得到这个: 为用户运行迁移: - 没有要迁移的东西。 - 为用户加载初始数据。没有找到固定装置。
    【解决方案3】:

    以下内容应该适用于某些人:

    python manage.py schemamigration myapp --initial
    python manage.py migrate myapp
    

    【讨论】:

      猜你喜欢
      • 2014-02-14
      • 2013-04-19
      • 2014-03-16
      • 2020-10-10
      • 2012-12-19
      • 2017-09-15
      • 2015-09-07
      • 2016-01-10
      • 2011-03-11
      相关资源
      最近更新 更多