データベースを MySql から PostgreSQL に移行しましたが、多くのテーブルが更新されていないことに気付いたので、グーグルで次のようにするように言われました。
ALTER SEQUENCE my_table_id_seq OWNED BY my_table.id;
そして物事はうまくいき始めました。すべてのテーブルでこれを行う必要がありました。
post_save
次に、django.contrib.auth.model.User を作成し、後でフックを使用して UserProfile を作成しようとするとIntegrityError
、user_id
外部キーが null として送信されるため、エラーが発生することに気付きました。
PostgreSQL に送信されるquery
and (Pythonの場合) は次のとおりです。args
INSERT INTO "auth_user" ("username", "first_name", "last_name", "email", "password", "is_staff", "is_active", "is_superuser", "last_login", "date_joined") VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) (u'apitest04', '', '', u'a@a.aa', 'sha1$9f796$69c88c635c8a53a91544765d7996747cf326cfec', False, True, False, u'2013-01-05 12:39:07.384198', u'2013-01-05 12:39:07.384198')
INSERT INTO "myapp_userprofile" ("user_id", "website", "job", "hobbies", "timezone", "about", "company_name", "company_description", "company_website", "retailer_country", "avatar", "default_license", "default_watermark_text", "default_watermark", "default_watermark_position", "default_watermark_opacity", "language") VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) (None, None, None, None, None, None, None, None, None, None, None, 0, None, False, 0, 10, None)
auth_user
トランザクションが閉じられる前にシーケンス IDが進められていないことが原因だと思います。User
の作成が失敗すると の作成がロールバックされるUserProfile
ため、それらは同じトランザクション中に発生しているに違いないと思います。
id
トランザクションがまだ終了していないため、のUser
が何らかの形でまだ返されていない可能性はありますか? そして、どのように私が問題を解決することを提案しますか?