2012-04-27 10 views
3

用のテーブルを作成していない私は私のDjangoプロジェクトのデータベースをリセットしたかったので、私は、次の手順をした:ジャンゴ南はuser_profiles

  1. は私のSQLiteデータベース
  2. python manage.py syncdb
  3. python manage.py migrate users --fake
  4. をしましたしました削除されました

新しいアカウントを作成してログインすると、次のエラーメッセージが表示されます。

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クラスがありますが、南にはユーザープロファイルを保持するテーブルを作成していないようでした。ここで

no such table: users_userprofile 
は次のようにmodel.pyが見えるもの、私のユーザーです。私が python manage.py schemamigration users --autoをするとき、それは何も変わったようではないと言います。どのようにしてuserprofilesテーブルを作成するのですか?

+1

なぜあなたは使用しなかった '' --fake''?それは実際に移行を行いません。 – jterrace

+0

サイドノート:get_goals関数はDoesNotExist例外を発生させません。一致する目標がない場合は、空のクエリセットを取得するだけです。 – sdolan

+0

'./manage.py convert_to_south users'を実行しましたか? – akhaku

答えて

6

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

python manage.py createsuperuser 

あなたがsyncdbの実行してデータベースを作成した後。この時点で、プロファイルテーブルが作成され、post_save信号が成功します。

0

--fakeオプションを指定せずにテーブルを移行してください。データベースに変更が加えられたが、south_migrationhistoryテーブルにない変更がある場合は、Fakeが役に立ちます。

+0

ユーザーを移行しようとすると次のようになります。ユーザーの移行を実行しています。 - 移行するものはありません。 - ユーザーの初期データを読み込みます。 備品が見つかりませんでした。 – egidra

0

以下は、一部の人のために働く必要があります。

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