3

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 テーブルを作成するにはどうすればよいですか?

4

3 に答える 3

6

私はこれとまったく同じ問題を抱えていました。South を使用すると、ある種の循環依存関係があることがわかります。この問題を回避するには、syncdb を実行するときにスーパーユーザーを作成せず、代わりに次を実行します。

python manage.py createsuperuser

syncdb でデータベースを作成した後。この時点で、プロファイル テーブルが作成され、post_save シグナルが成功します。

于 2012-05-13T21:18:18.687 に答える
0

以下は、一部の人にとってはうまくいくはずです。

python manage.py schemamigration myapp --initial
python manage.py migrate myapp
于 2013-10-28T15:01:53.333 に答える
0

--fake オプションを使用せずにテーブルを移行してみてください。データベースに変更が適用されているが、south_migrationhistory テーブルにない場合、フェイクは便利です。

于 2012-04-27T04:48:05.703 に答える