2012-05-01 6 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'を返し、 t raise 'DoesNotExist') –

+0

他のシグナルハンドラはありませんか? – ilvar

+0

関連するビューを追加しました。私が持っている唯一のシグナルハンドラは、新しいユーザプロファイルを作成します。 – egidra

答えて

1

私は推測して、models.pyが複数回ロードされた結果、あなたのpost_save信号が複数回登録されることを示唆します。あなたは安全な方法であなたの信号を登録していません。おそらく、そのプロファイルをsave()で複数回作成し、エラーを取得しようとしています。そのは多くを呼ばれていても、それは一度だけ登録されることになります

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

派遣UIDを持つ:

は次のように何かに最後の行を変更してみてください Preventing Duplicate Signals

上のドキュメントを見てみましょう輸入の結果としての時間。

+0

ありがとう、それが理由だった。私のローカルホストでは動作していたが、リモートホストでは動作していなかった理由はわかりません。 – egidra

+0

@geidra:あなたのlocalhost上で私はあなたが開発サーバーを使用していたと仮定しています、そして、リモートではプロダクションサーバーの何らかの形式を使用していましたか? – jdi

+0

はいそうです。どのような効果がありますか? – egidra

関連する問題