Django как указать, в какую таблицу сохранять зарегистрированных пользователей?
делаю свой проект на Django, создала собственную таблицу для того чтобы хранить информацию о пользователях. но я не понимаю, как мне ее указать (и надо ли указывать), чтобы пользователи после успешной регистрации сохранялись в моей таблице? также хочу сказать, что создавала пользователя через админку, и он сохранился в нужной мне таблице. однако когда я регистрируюсь на своем сайте через форму регистрации, то никаких обновлений в таблице не происходит
модель User:
class User(models.Model):
"""Класс, описывающий пользователя"""
first_name = models.CharField(max_length=20, verbose_name="Имя пользователя")
last_name = models.CharField(max_length=20, verbose_name="Фамилия пользователя")
email = models.EmailField(
max_length=254, verbose_name="Электронная почта пользователя"
)
# favourites = add to favourites
def validate_length(
value, length=11
): # Display a message when creating a classified
if len(str(value)) != length:
raise ValidationError("%s is not the correct length" % value)
phone_number = models.CharField(
max_length=11,
validators=[validate_length],
verbose_name="Номер телефона",
default=None,
) # Display contact phone number
def __str__(self):
return str(self.first_name) + " " + str(self.last_name)
class Meta:
verbose_name = "Пользователь"
verbose_name_plural = "Пользователи"
форма регистрации:
class RegisterForm(UserCreationForm):
first_name = forms.CharField(
max_length=100,
required=True,
widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Имя'}),
)
last_name = forms.CharField(
max_length=100,
required=True,
widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Фамилия'}),
)
email = forms.EmailField(
max_length=100,
required=True,
widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Email'}),
)
phone_number = forms.CharField(
max_length=100,
required=True,
widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Номер телефона'}),
)
password = forms.CharField(
required=True,
widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Пароль'}),
)
password2 = forms.CharField(
required=True,
widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Подтверждение пароля'}),
)
class Meta:
model = User
fields = [
'first_name', 'last_name', 'email', 'phone_number', 'password1', 'password2'
]
класс представления для регистрации:
class RegistrationUserView(FormView):
form_class = RegisterForm
success_url = 'login/'
template_name = 'apartment_app/registration.html'
def form_valid(self, form):
form.save()
return super(RegistrationUserView, self).form_valid(form)
def form_invalid(self, form):
return super(RegistrationUserView, self).form_invalid(form)
Вы пытаетесь создать пользователя не наследуясь при этом от него. Указываете ли вы django AUTH_USER_MODEL
? Если нет то укажите в настройках проекта это:
settings.py
AUTH_USER_MODEL = 'users.User' # users - название приложения
Так же вы используете UserCreationForm
, при этом вы ненаследуетесь или не расширяете абстрактную модель.
Используйте AbstractUser
в своих моделях:
models.py
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
...
fields
...
Так же, если не ошибаюсь, нельзя так переопределять поля по умолчанию в UserCreationForm
, в место этого лучше использовать __init__
метод:
class SignUpForm(UserCreationForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['username'].widget.attrs.update(
{
'type':'text',
'id':"username",
"name":"username",
"class":"form-control,
"placeholder":"Логин"
}
)
self.fields['password1'].widget.attrs.update(
{
"type":"password",
"name":"password1",
"id":"password1",
"class":"form-control",
"placeholder":"Пароль",
}
)
self.fields['password2'].widget.attrs.update(
{
"type":"password",
"name":"password2",
"id":"password2",
"class":"form-control",
"placeholder":"Пароль",
}
)
class Meta:
model = User
fields = ['username', 'password1','password2', ]
Должно решить вашу проблему.