Как добавить новые поля в пользовательскую модель пользователя?
Я создал пользовательскую модель пользователя и она отлично работает. Но проблема в том, что я много раз пытался добавить новые поля, такие как first_name, last_name, phone_number, и так далее, но не работает. Выдает ошибку. Какое будет соответствующее решение, как я могу исправить это и добавить новые поля в пользовательскую модель пользователя?
models.py:
class User(AbstractUser):
email = models.EmailField( max_length=150,unique=True,error_messages={"unique":"The email must be unique."})
REQUIRES_FIELDS = ["email"]
objects = CustomeUserManager()
def __str__(self):
return str(self.pk) + "." + self.username
form.py:
from django import forms
from .models import User
class UserRegistrations(forms.ModelForm):
class Meta:
model = User
fields = ("username", "email", "password",)
def clean_username(self):
username = self.cleaned_data.get('username')
model = self.Meta.model
user = model.objects.filter(username__iexact=username)
if user.exists():
raise forms.ValidationError(
"Ther User already exist with the given username")
return self.cleaned_data.get('username')
def clean_email(self):
email = self.cleaned_data.get('email')
model = self.Meta.model
user = model.objects.filter(email__iexact=email)
if user.exists():
raise forms.ValidationError(
"The email already exist with the given email")
return self.cleaned_data.get('email')
def clean_password(self):
password = self.cleaned_data.get('password')
confirm_password = self.data.get('confirm_password')
if password != confirm_password:
raise forms.ValidationError("Password do not match!")
return self.cleaned_data.get('password')
manager.py:
from django.contrib.auth.base_user import BaseUserManager
class CustomeUserManager(BaseUserManager):
def create_user(self, username, email, password, **extra_fields):
if not username:
raise ValueError("The user must be set")
if not email:
raise ValueError("The email must be set")
if not password:
raise ValueError("The password must be set")
email = self.normalize_email(email)
user = self.model(username = username, email = email, password = password, **extra_fields)
user.set_password(password)
user.save()
return user
def create_superuser(self, username, email, password, **extra_fields):
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_superuser', True)
extra_fields.setdefault('is_active', True)
if extra_fields.get('is_staff') is not True:
raise ValueError("The super user must have staff=true")
if extra_fields.get('is_superuser') is not True:
raise ValueError("The super user must have is_superuser=true")
return self.create_user(username = username, email = email, password = password, **extra_fields)
Я думаю, что вы создали модель, но не добавили ее в файл settings.py.
settings.py
AUTH_USER_MODEL = 'myapp.MyUser'
Узнайте больше здесь https://docs.djangoproject.com/en/4.0/topics/auth/customizing/