2013-01-11 31 views
2

用戶配置文件類看起來是這樣的:修改用戶的個人資料,同時增加新的用戶將失敗,並「重複輸入錯誤」

class UserProfile(models.Model): 

    user = models.OneToOneField(User) 
    email_my_machines = models.BooleanField(default=True) 
    email_others_machines = models.BooleanField(default=True) 

    class Meta(object): 
     verbose_name_plural = "Profile" 

def create_user_profile(sender, instance, created, **kwargs): 
    UserProfile.objects.get_or_create(user=instance) 

post_save.connect(create_user_profile, sender=User) 

新增"AUTH_PROFILE_MODULE = 'generic.UserProfile'" settings.py中

其所有工作正常。

在Django Admin中,添加用戶有兩種形式。第一種形式具有最小的字段,如「用戶名」,「密碼」,「密碼確認」以及「用戶配置文件」類中提供的字段。 當我修改此表單中的「用戶配置文件」字段時,應用程序將崩潰,錯誤爲「(1062,」關鍵字'user_id'「)的重複條目'34'」。這是一個完整性錯誤。

我是Django的新手。你能幫我解決嗎?

+0

你肯定你的'post_save'不火的形式有機會創建一個新的實例之前(從而使形式失敗)? – patrys

+0

編號post_save不會被調用。我觀察到的其他事情是,在這次崩潰後,我可以看到用戶在auth_user表中創建。 – rajpy

+0

確保您知道哪部分代碼會導致引發異常。 – patrys

回答

2

我見過這個的唯一時間是當兩次發射相同的信號。嘗試添加dispatch_uid你的信號連接,它應該的fixit:

post_save.connect(create_user_profile, sender=User, dispatch_uid='create_profile_user') 

參見:https://docs.djangoproject.com/en/dev/topics/signals/#preventing-duplicate-signals

+0

謝謝。它沒有解決問題。插入發生兩次: INSERT INTO'generic_userprofile'('user_id','email_my_machines','email_others_machines')VALUES(40,1,1) INSERT INTO'generic_userprofile'('user_id','email_my_machines','email_others_machines' )VALUES(40,0,0) 我不知道這裏發生了什麼。 – rajpy

+2

解決了它。添加「primary_key = True」爲 user = models.OneToOneField(User,primary_key = True) – rajpy

相關問題