Пользовательская регистрация ведет к IntegrityError

После того, как пользователь зарегистрируется, отображается следующее IntegrityError:

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

Несмотря на то, что пользователь получает сообщение об ошибке, он может регулярно входить в систему. Пользователь создается вместе с UserProfile.

Вот представление / 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)) 

Вот мой /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 на моем localhost и mysql на моем удаленном хосте.

One Solution collect form web for “Пользовательская регистрация ведет к IntegrityError”

Я собираюсь угадать и предположить, что ваш post_save сигнал регистрируется несколько раз в результате того, что models.py загружается более одного раза. Вы не регистрируете свой сигнал безопасным образом. Возможно, он пытается создать профиль более одного раза быстрее при сохранении () и получить ошибку.

Взгляните на документы по предотвращению дублирования сигналов

Попробуйте изменить последнюю строку на что-то вроде:

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

Наличие диспетчера uid приведет к тому, что он будет зарегистрирован только один раз, даже если его вызвали много раз в результате импорта.

  • Как установить фокус на CharField элемента формы django
  • Диспетчер списка Django List + ForeignKey = пустой список изменений
  • встроенный режим mod_wsgi с virtualenv
  • Django Rest Framework - нет модуля с именем rest_framework
  • Ошибка атрибута Django: объект «int» не имеет атрибута «essay_question» - приложение для викторины Django
  • Невозможно ли настроить Django admin?
  • Django RedirectView и reverse () не работают вместе?
  • python reportlab - registerFont - django - шрифт недоступен через некоторое время
  • Python - лучший язык программирования в мире.