ОШИБКА: повторяющаяся запись нарушает исключительное ограничение "user_otherinfo_user_id_key" - PullRequest
0 голосов
/ 14 мая 2019

ОШИБКА: повторяющаяся запись нарушает исключительное ограничение "user_otherinfo_user_id_key" ДЕТАЛИ: ключ "(user_id) = (52)" уже существует.

После добавления пользователем процесса обновленияЯ получаю такую ​​ошибку при регистрации.

views.py

    def register(request):

        form = RegisterForm(request.POST or None,request.FILES or None )
        if form.is_valid():
            user = form.save(commit=False)
            first_name = form.cleaned_data.get('first_name')
            last_name = form.cleaned_data.get('last_name')
            username = form.cleaned_data.get("username")
            email = form.cleaned_data.get('email')
            password = form.cleaned_data.get('password1')
            phone = form.cleaned_data.get('phone_number')
            location = form.cleaned_data.get('location')
            profile_image = form.cleaned_data.get('profile_image')
            user.set_password(password)

            user.save()
            new_user = authenticate(username=user.username, first_name=first_name, last_name=last_name, email=email, password=password)


         OtherInfo.objects.create(user=new_user,phone=phone,location=location,
         profile_image=profile_image)

            login(request,new_user)
            messages.info(request,"Successfully Register...")

            return redirect("/")
         context = {
                "form" : form
            }
         return render(request,"user/register.html",context)

models.py

    class OtherInfo(models.Model):

        user = models.OneToOneField(User,on_delete=models.CASCADE)
        phone = models.CharField(max_length=11,verbose_name="Phone Number")
        location = models.CharField(max_length=50,verbose_name="Location")
        profile_image = models.FileField(blank = True,null = True,verbose_name="Image")

forms.py

    class RegisterForm(forms.ModelForm):
        email = forms.EmailField()
        password1 = forms.CharField(max_length=100, label='Parola',widget=forms.PasswordInput())
        password2 = forms.CharField(max_length=100, label='Parola Again', widget=forms.PasswordInput())
        phone_number = forms.CharField(required=False, max_length=11, label='Phone Number')
        location = forms.CharField(required=False, max_length=50, label='Location')
        profile_image = forms.FileField(required=False, label="Image")

        class Meta:
            model = User

            fields = [
                'first_name',
                'last_name',
                'email',
                'username',
                'password1',
                'password2',
                'phone_number',
                'location',
                'profile_image',
            ]

В Django пользователь может зарегистрироваться перед обновлением профиля.Когда я добавляю код обновления профиля, теперь пользователь не может зарегистрироваться.

Как я могу решить проблему?

1 Ответ

0 голосов
/ 14 мая 2019

Ваша трассировка означает, что у вашего пользователя уже есть OtherInfo.

Вы можете использовать ManyToOne (ForeignKey) вместо OneToOne, чтобы у одного пользователя было несколько OtherInfos.Или вам нужно добавить какую-то проверку, чтобы проверить, есть ли у вашего пользователя OtherInfo.

Эта часть документации может помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...