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

У меня есть рабочий пример регистрации с именем пользователя и электронной почтой. Я хочу сделать это только по электронной почте. Когда я начинаю манипулировать им (например, удалять «имя пользователя» в классе UserForm (forms.py), я получаю IntegrityError в / application / register / UNIQUE constraint failed: 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})

Чтобы изменить процесс входа в систему, нужно немного больше, чем просто удалить поле.

Klaus D. 01.05.2018 13:09

@KlausD. Это было очень полезно, спасибо вам большое!

kporcelainluv 01.05.2018 13:22
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
43
0

Другие вопросы по теме