我在使用 django-registration 和信号时遇到了一些问题。基本设置是我有一个 django 1.4.3 设置,带有 django-south 和 django-registration(数据库是 SQLite 的价值)。
编辑:我稍微改变了这个问题,因为shell中的效果是一样的,所以注册不是原因(编辑是斜体)。
我有一个与 User 模型相关的模型,其方式如下:
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()
当我在那里时,一切似乎都很好,如果我打印 ids(用于用户和个人资料),并且如果我在 2 之间来回移动,我会看到一些似乎正确的东西。
如果我禁用这部分代码并使用 shell 进行相同类型的初始化,我会得到相同的结果。
但在那之后,一切都错了。如果我打开一个shell并导入相关事项,我对每个X值都有以下内容
MyUserProfile.objects.get(pk=X)
#DoesNotExist Exception
User.objects.get(pk=X).myuserprofile.pk
1
MyUserProfile.objects.all()[X].pk
1
好像有点奇怪不是吗?
现在如果我去 sql shell
select id from myApp_myuserprofile;
1
1
1
1
...
所以我有一个主列,到处都是相同的值。这很好......至少可以说令人尴尬(并且确实会导致问题,因为每个人都有一个具有相同 ID 的个人资料)。
任何想法可能是问题的原因以及我如何解决它?
PS:请注意,相关关系中的外键是正确的,并且保留了它们的唯一性。