django-registration とシグナルの使用に少し問題があります。基本的なセットアップは、django-south と django-registration を備えた django 1.4.3 セットアップがあることです (そして、db は価値のある SQLite です)。
編集:シェルでも効果は同じであるため、質問を少し変更しました。登録は原因ではありません(編集は斜体で表示されています)。
次の方法で User モデルに関連するモデルの 1 つがあります。
class MyUserProfile(models.Model):
user = models.OneToOneFiled(User)
#additional fields
南を使用してベースを初期化しました。sqlall
その中にあるはずのSQLを少し確認すると、次のことがはっきりとわかります。
CREATE TABLE "myApp_myuserprofile" (
"id" integer NOT NULL PRIMARY KEY
"user_id" integer NOT NULL UNIQUE REFERENCES "auth_user" ("id"),
#other fields
)
その後、ユーザーがアカウントを有効化した場合にデータを初期化したいと考えました。だからmodels.pyに入れました
from django.dispatch import receiver
from registration.signals import user_activated
#Models....
@receiver(user_activated)
def createMyProfile(sender, **kwargs):
currentUser = kwargs['user']
profile = Profile(user = currentUser, #other fields default value)
profile.save()
#And now the reverse relation:
currentUser.myuserprofile = profile
currentUser.save()
私がそこにいる間、ID (ユーザーとプロファイルの両方) を印刷すると、すべて問題ないように見えます。2 の間を行ったり来たりすると、正しいと思われるものが表示されます。
コードのこの部分を無効にして、シェルを使用して同じ種類の初期化を行うと、同じ結果が得られます。
しかし、その後、すべてが間違っています。シェルを開いて関連事項をインポートすると、すべての X 値に対して次のようになります
MyUserProfile.objects.get(pk=X)
#DoesNotExist Exception
User.objects.get(pk=X).myuserprofile.pk
1
MyUserProfile.objects.all()[X].pk
1
少し奇妙に思えませんか?
そして今、SQLシェルに行くと
select id from myApp_myuserprofile;
1
1
1
1
...
だから私はどこでも同じ値で満たされているプライマリ列を持っています。これはまあ... 控えめに言っても恥ずかしいことです (誰もが同じ ID のプロファイルを持っているため、問題が発生します)。
問題の原因と解決方法について何か考えはありますか?
PS: 関連リレーションからの外部キーは正しく、その一意性は保持されていることに注意してください。