Сделал регистрацию на сайте таким образом:
1) Расширил модель пользователя, добавив поле для телефона:
class User(AbstractUser):
phone = models.CharField(max_length=50)
2) Прописал в
settings.py AUTH_USER_MODEL='myapp.User'
3)
manage.py makemigrations
4)
manage.py migrate
5) Кастомизировал форму UserCreationForm:
class CreateForm(UserCreationForm):
error_messages = {
'duplicate_username': "Пользователь с таким именем уже существует",
'password_mismatch': "Введенные пароли не совпадают"
}
username = forms.RegexField(label="Имя пользователя:", max_length=30,
regex=r'^[\w.@+-]+$', widget=forms.TextInput(attrs={'class': 'form-control'}))
password1 = forms.CharField(label="Пароль:",
widget=forms.PasswordInput(attrs={'class': 'form-control'}))
password2 = forms.CharField(label="Повторите пароль:",
widget=forms.PasswordInput(attrs={'class': 'form-control'}))
6) Написал контроллер:
def signup(request):
if request.method == 'POST':
form = CreateForm(request.POST)
if form.is_valid():
username = cleaned_data['username']
password = cleaned_data['password1']
User.objects.create_user(username=username, password=password)
return redirect('/success/')
elif request.method == 'GET':
form = CreateForm()
return render(request, 'core/signup.html', {'form': form})
В итоге, выдает ошибку:
Exception Type: ProgrammingError at /signup/
Exception Value: relation "auth_user" does not exist
LINE 1: SELECT (1) AS "a" FROM "auth_user" WHERE "auth_user"."userna...
^
Я посмотрел
исходники:
Там напрямую используют класс django.contrib.auth.models.User, который я заменил своим классом User - подумал, что ошибка в этом и вставил костыль:
Добавил в
myapp.forms следующее:
from myapp.models import User
А в CreateForm:
class Meta:
model = User
fields = ("username",)
P.S. Замечу, что при миграции были ошибки. Рубил с плеча - удалил все миграции и базу. Создал базу и создал миграции. Мигрировал - все ОК.
Все работает, но не хочу я делать таким образом.
Как быть?