SHEZAR
@SHEZAR

Kак исправить эту ошибку:IntegrityError at /accounts/register/ UNIQUE constraint failed: accounts_userprofile.user_id?

#views.py
from django.shortcuts import render, redirect
from accounts.forms import RegistrationForm, EditProfileForm, UserProfile
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserChangeForm, PasswordChangeForm
from django.contrib.auth import update_session_auth_hash
from django.contrib.auth.decorators import login_required


def register(request):
    registered = False

    if request.method == "POST":
        user_form = RegistrationForm(request.POST)
        profile_form = UserProfile(request.POST)
        if user_form.is_valid() and profile_form.is_valid():

            user = user_form.save()
            user.set_password(user.password)
            user.save()

            profile = profile_form.save(commit=False)
            profile.user = user

            if 'profile_pic' in request.FILES:
                profile.profile_pic = request.FILES['profile_pic']
            profile.save()

            registered = True
        return redirect('accounts/')

    else:
        user_form = RegistrationForm()

        profile_form = UserProfile()

    args = {'user_form': user_form, 'profile_form': profile_form}

    return render(request, 'registration/reg_form.html', args)
  • Вопрос задан
  • 716 просмотров
Пригласить эксперта
Ответы на вопрос 1
Guest007
@Guest007
Django, Python, Linux и всё такое...
Вы пытаетесь создать второй Профиль к пользователю, а там, скорее всего, стоит OneToOneField (или ForeignKey с unique=True).
Делайте проверку: Если профиль есть, то берём и апдейтим. Если нет - создаём. Хотя лучше создавать профиль одновременно с созданием Пользователя и потом всегда только обновлять запись, не пытаясь создавать.

А так - да, без трейса, кода и списка использованных пакетов можно только общие слова говорить...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы