Почему, если я удаляю поле имени пользователя в django forms.ModelForm, регистрация завершится неудачно? - PullRequest
0 голосов
/ 01 мая 2018

У меня есть рабочий пример регистрации с именем пользователя и адресом электронной почты. Я хочу сделать это только по электронной почте. Когда я начинаю им манипулировать (например, удаляю «username» в классе UserForm (forms.py), я получаю IntegrityError в / application / register / UNIQUE ограничение не выполнено: auth_user.username). Как я могу это исправить?

models.py

class UserProfileInfo(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    # additional
    portfolio_site = models.URLField(blank=True)
    profile_pic = models.ImageField(upload_to="profile_pics", blank=True)

    def __str__(self):
        return self.user.username

forms.py

class UserForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput())

    class Meta():
        model = User
        fields = ("username", "email", "password")

class UserProfileInfoForm(forms.ModelForm):
    class Meta():
        model = UserProfileInfo
        fields = ("portfolio_site","profile_pic" )

views.py

def register(request):

    registered = False

    if request.method == "POST":
        user_form = UserForm(data=request.POST)
        profile_form = UserProfileInfoForm(data=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
        else:
            print(user_form.errors, profile_form.errors)

    else:
        user_form = UserForm()
        profile_form = UserProfileInfoForm()
    return  render(request, 'application/register.html', {
                            "user_form":user_form,
                            "profile_form":profile_form,
                            "registered":registered})
...