2017-01-16 30 views
4

この私のUserProfileの変更整合性エラー:更新または削除が外部キー制約に違反しています。ジャンゴ+ PosrgeSQL

class UserProfile(models.Model): 
     user = models.OneToOneField(User) 
     fb_id = models.IntegerField(primary_key=True,null=False,blank=True) 
     follows = models.ManyToManyField('self', related_name='followed_by', symmetrical=False) 
    User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0]) 

私はすべてのテストユーザーまたはそれらの任意の単一を削除しようとした後、次のエラーが発生します。

django.db.utils.IntegrityError: update or delete on table "blog_userprofile" violates foreign key constraint "blog_from_userprofile_id_a482ff43f3cdedf_fk_blog_userprofile_id" on table "blog_userprofile_follows" 
DETAIL: Key (id)=(4) is still referenced from table "blog_userprofile_follows". 

カスケード削除は、なぜ私はこれを受けていると私はどのように問題を解決することができ、デフォルトでtrueでなければなりませんか?私はPostgreSQL + Django 1.8を使用しています。

編集:少し前提条件:私はprimary_keyをデフォルトからfb_idに変更しました。ユニークに設定されていなかったため、重複がありました。したがって、このエラーは、私は/ makemigrations/syncdbの実行を移行しようとしたときに発生する:私はすべてのテストユーザー

を削除しようとしましたが、私はすべてをリセットしようとしたとき、私が取得しようとした理由がある

django.db.utils.IntegrityError: could not create unique index "blog_userprofile_fb_id_ce4e6e3086081d4_uniq" 
DETAIL: Key (fb_id)=(0) is duplicated. 

多くのテストの後

django.db.utils.ProgrammingError: multiple default values specified for column "id" of table "blog_userprofile" 
+3

なぜこのプロパティを使用しますか? 'OneToOneField'に' related_name'を与えてください! – schwobaseggl

+0

@schwobaseggl ForeignKeyによって参照されていますが、デフォルトでのみ(オプションなし) –

+1

@schwobasegglなぜですか?誤ったチュートリアルをたどって、おそらくドキュメンテーションを注意深く読んでいない可能性があります –

答えて

1

をし、私は私の現在のDBのPostgreSQLは、MySQLからの移行だったので、私の制約は、割り当てられたオプション繰延及び繰延なしだったことを見つけ出す:プライマリキーをデフォルトに、私が受け取ります。その後、私はDB上でこのオプションを手作業で割り当てて作業しました。

enter image description here

もっとリンク怒鳴る上でこのオプションに関する情報: Deferrable check constraint in PostgreSQL

私はこれが役立つことを願って。

関連する問題