Я пытаюсь создать индивидуальную регистрационную форму. Основная идея заключается в том, что пользователи должны использовать электронную почту в качестве метода входа в систему и иметь возможность устанавливать имя пользователя в профиле (поэтому я не хочу переопределять поле имени пользователя). Проблема со встроенной моделью django User заключается в том, что требуется поле имени пользователя, поэтому я создал свою собственную модель на основе AbstractUser. Теперь, когда я пытаюсь зарегистрировать нового пользователя, я получаю сообщение «Не удалось выполнить ограничение UNIQUE: users_user.username».
models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
forms.py
from django import forms
from .models import User
class RegisterForm(forms.ModelForm):
username = forms.CharField(max_length=100, required=False)
email = forms.EmailField(label='', max_length=100, widget=forms.TextInput(attrs={'placeholder': 'email@example.com'}))
password = forms.CharField(label='', max_length=100, widget=forms.PasswordInput(attrs={'placeholder': 'Password'}))
class Meta:
model = User
fields = ['username', 'email', 'password']
views.py
from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import RegisterForm
def register(request):
if request.method == 'POST':
form = RegisterForm(request.POST)
if form.is_valid():
form.save()
return redirect('trade')
else:
form = RegisterForm()
return render(request, 'users/register.html', {'form': form})
AUTH_USER_MODEL = 'users.User' установлен
Я попытался установить email unique = True в models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
email = models.EmailField(unique=True)
Теперь я получаю: «Представление users.views.register не вернуло объект HttpResponse. Вместо этого он возвратил None».
Имейте в виду, что это мой первый django проект :) Помощь приложено!
РЕДАКТИРОВАТЬ с решением:
Ну, я решил это. Все ответы в django документации (кто бы учил). Проблема в том, что если вы новичок, как я, для python и django, чтение документации по пользовательской модели пользователя может быть очень утомительным. Основная цель заключалась в том, чтобы установить электронную почту в качестве метода входа в систему. Для этого вам нужно установить USERNAME_FIELD = 'email' в вашей модели. И чтобы иметь возможность сделать это, вы должны создать свою модель, основанную не на AbstractUser, а на AbstractBaseUser (https://docs.djangoproject.com/en/3.0/topics/auth/customizing/#specifying -a-custom-user-model ) и переписать способ создания пользователей. Мне это показалось довольно сложным, но django имеет очень хороший пример того, как это сделать, прямо в конце документации (https://docs.djangoproject.com/en/3.0/topics/auth/customizing/#a -full-example ). Я просто скопировал код, заменил date_of_birth на username и получил именно то, что хотел, плюс немного понимания того, как все работает.