علی یوسفیان
علی یوسفیان
خواندن ۱ دقیقه·۳ سال پیش

customize User Model in django

شاید برای شما نیز پیش آمده باشد که بخواهد مدل 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



djangomodelusermodelجنگو
همیشه برنامه‌نویس ولی یه برنامه‌نویس متن باز عاشق پایتون جنگو و تحلیل داده
شاید از این پست‌ها خوشتان بیاید