У меня есть рабочий пример регистрации с именем пользователя и адресом электронной почты. Я хочу сделать это только по электронной почте. Когда я начинаю им манипулировать (например, удаляю «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})