用户注册后,将显示以下完整性错误:
IntegrityError at /users/signup
(1062, "Duplicate entry '1' for key 2")
即使用户收到错误,他也可以定期登录。将创建用户以及用户配置文件。
下面是导致错误的/users/signup 视图:
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))
这是我的/用户/模型.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数据库中的所有表,并在syncdb上运行python manage.py,但是每次创建新用户后,我仍然会收到相同的错误。
编辑:我在本地主机上没有收到此错误,仅在远程主机上收到此错误。我在本地主机上使用 sqlite,在远程主机上使用 mysql。
我将猜测并建议这可能是由于 models.py 多次加载而导致您的post_save信号被多次注册。您没有以安全的方式注册信号。也许它试图在 save() 上多次快速创建配置文件并得到错误。
查看有关防止重复信号的文档
尝试将最后一行更改为以下内容:
post_save.connect(create_user_profile, sender=User,
dispatch_uid="user_create_profile")
拥有调度 uid 将导致它只注册一次,即使由于导入而多次调用。