شاید برای شما نیز پیش آمده باشد که بخواهد مدل user را در جنگو تغییر دهید.
به صورت پیش فرض username در مدل user یکتا است حال فرض کنید میخواهید فیلد ایمیل نیز یکتا باشد این تغییر کل مدل user را تغییر نمیدهد و فقط برای فیلد ها تغییر جزی همراه دارد برای این نوع تغییرات از کلاس AbstractUser استفاده میکنیم و اگر بخواهیم تمام فیلدهای مدل User را تغییر دهیم از کلاس AbstractBaseUser استفاده می شود برای مثال میخاهیم فیلد ایمیل را یکتا کنیم برای این کار من در پروژه یک app با نام core ایجاد میکنم :
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'core',
]
ویرایش users/models.py:
from django.contrib.auth.models import AbstractUser
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils.translation import ugettext_lazy as _
from .managers import CustomUserManager
class CustomUser(AbstractUser):
username = None
email = models.EmailField(_('email address'), unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
def __str__(self):
return self.email
همانطور که مشاهده میکنید فیلد ایمیل اجباری شده است و فیلد username را حذف کردیم.
در قسمت تنظیمات مسیر مدل user را از حالت پیش فرض تغییر میدهیم
AUTH_USER_MODEL = 'core.CustomUser'
و سپس عملیات مایگریت برای دیتابیس را انجام میدهیم
python manage.py makemigrations