2013-04-22 37 views
0

我使用django註冊和信號有點問題。 基本設置是我有一個django 1.4.3安裝程序,使用django-south和django註冊(並且db是SQLite,它的價值)。OneToOne引發某些ID問題的用戶字段

編輯:我改變了一點問題,因爲效果是相同的一個外殼,所以註冊是不是原因(編輯是斜體)。

我有一個關於通過以下方式在用戶模式我模型的一個:

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間,我看到一些看起來正確的東西。

如果我停用這部分代碼和使用shell做同一種初始化的,我得到了相同的結果。

但在那之後,everyhting是錯誤的。 如果我打開一個外殼和導入相關的事項,我的每一個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的個人資料)。

任何想法,這可能是問題的原因,我怎麼能解決呢?

P.S:請注意,從相關關係外鍵是否正確,以及自己的獨特性被保留。

回答

0

那麼看起來這個問題確實是從使用SQLite和南方的到來。

doc指出:

的SQLite本身並不支持多模式改變所有,但南方有變通方法,讓列刪除/改變。但是,唯一索引仍然不受支持;南將默默地忽略任何這樣的命令。

這是(我認爲)的情況,因爲我從一開始就沒有創建這個關係,但是後來的遷移。我只是重新設置了基地和遷徙,並且瞧。

有關遷移的信息,請參見What's the recommended approach to resetting migration history using Django South?,對於基本復位,請參閱./manage.py reset myApp