IntegrityError в / account / signup в django при попытке регистрации - PullRequest
0 голосов
/ 25 апреля 2020

это мой блог: http://gorani-dncvb.run.goorm.io/

Я пытаюсь создать страницу регистрации для моего django блога.

Я закончил писать коды для шаблона / view / form / url и успешно подключен к странице: http://gorani-dncvb.run.goorm.io/accounts/signup.

Итак, я пришел к выводу, что в шаблоне / url нет проблем. но проблема возникает после попытки регистрации, он говорит:

IntegrityError at /accounts/signup
UNIQUE constraint failed: auth_user.username

и это мой код просмотра:

def signup(request):
    if request.method == "POST":
        form = SignupForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password')
            user = User.objects.create_user(username=username, password=raw_password)
        return redirect("post_list")
    else:
        form = SignupForm()
        return render(request, 'registration/signup.html', {'form':form})

и это код формы:

class SignupForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('username','password',)

(Я не использовал UserCreateForm специально)

Определенно нет перекрывающихся друг с другом пользователей, так почему я вижу это сообщение об ошибке?

1 Ответ

0 голосов
/ 25 апреля 2020

Причиной дублирования пользователя является то, что django создает пользователя при сохранении формы. Если форма является дочерней по отношению к ModelForm, при ее сохранении будет создан новый объект класса модели, связанный с формой.

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

def signup(request):
    if request.method == "POST":
        form = SignupForm(request.POST)
        if form.is_valid():
            user = form.save()
            user.set_password(user.password)
            user.save()
        return redirect("post_list")
    else:
        form = SignupForm()
        return render(request, 'registration/signup.html', {'form':form})

С уважением.

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