2012-05-01 42 views
0

一個用戶註冊後,顯示如下IntegrityError:用戶註冊導致IntegrityError

IntegrityError at /users/signup 
(1062, "Duplicate entry '1' for key 2") 

即使用戶得到一個錯誤,他可以定期登錄。用戶與UserProfile一起創建。

下面是導致該錯誤的/用戶/註冊視圖:

def signup(request): 
    signup_form = SignupForm(request.POST) 
    #goal = request.POST.get('goal') 
    goal = None 
    if signup_form.is_valid(): 
    username = signup_form.cleaned_data['username'] 
    email = signup_form.cleaned_data['email'] 
    password = signup_form.cleaned_data['password'] 
    user = User.objects.create_user(username, email, password) 
    user = authenticate(username=username, password=password) 
    login(request, user) 
    return HttpResponseRedirect("/") 
    else: 
    return render_to_response("authorize.html", {'signup_form': signup_form, 'goal': goal}, context_instance=RequestContext(request)) 

這裏是我的/user/models.py:

from django.db import models 
from django.contrib.auth.models import User 
from django.db.models.signals import post_save 
from main.models import Goal 

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    joined_goals = models.ManyToManyField(Goal, related_name="joined_goals") 
    followingGoals = models.ManyToManyField(Goal, related_name="following_goals") 

    def __unicode__(self): 
    return self.user.username 

    def get_goals(self): 
    try: 
     goals = Goal.objects.filter(user=self.user) 
     return goals 
    except Goal.DoesNotExist: 
     return [] 

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

post_save.connect(create_user_profile, sender=User) 

我已經下降了所有的表中我的MySQL數據庫多次運行python manage.py syncdb,但每創建一個新用戶後,我仍然得到相同的錯誤。

編輯:我沒有得到這個錯誤在我的本地主機,只在我的遠程主機上。我在本地主機上使用sqlite,在遠程主機上使用mysql。

+0

發佈相關視圖;你也可以簡化'get_goals(self)'來簡單地'def get_goals(self):return Goal.objects.filter(user = self.user)'('filter'返回一個空的'QuerySet',如果沒有匹配的話,提高'DoesNotExist') –

+0

難道你還沒有其他的信號處理程序? – ilvar

+0

我添加了相關的視圖。唯一的信號處理程序我創建了一個新的用戶配置文件。 – egidra

回答

1

我打算猜測,並建議它可能是您的post_save信號被多次註冊,因爲models.py被加載了多次。您沒有以安全的方式註冊您的信號。也許它試圖在save()中快速創建配置文件並獲取錯誤。

就以Preventing Duplicate Signals

看看文檔,請嘗試更改最後一行是這樣的:

post_save.connect(create_user_profile, sender=User, 
        dispatch_uid="user_create_profile") 

具有調度UID將導致它只能註冊一次,即使其稱爲多次數由於進口。

+0

謝謝,就是這個原因。不知道爲什麼它在我的本地主機上工作,但不是我的遠程主機。 – egidra

+0

@egidra:在您的本地主機上,我假設您使用的是開發服務器,而在遠程您使用某種形式的生產服務器? – jdi

+0

是的,這是正確的。那會有什麼影響? – egidra