在 Django 中預設有 User Model ,
內建有幾個基本的欄位
- username
- first_name
- last_name
- password
- groups
- user_permissions
- is_staff
- is_active
- is_superuser
- last_login
- date_joined
若是這些欄位都不符合使用需求時,
就需要自訂 USER Model,
這就是今天要來教大家的
Django 自訂 USER Model 範例教學
自訂 USER Model 有幾個方法,
最簡單的是直接以一對一關係新增相關的欄位,
直接以程式碼做為範例:
from django.contrib.auth.models import User
from django.db import models
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name='帳號名稱')
real_name = models.CharField(max_length=30, blank=True, verbose_name='真實姓名')
首先必須先到 models.py
從 django.contrib.auth.models 匯入 User
透過一對一關係
models.OneToOneField
將 USER Model 的欄位做個延伸,
底下再加入要新增的相關欄位即可,
在此範例中將真實姓名加入 UserProfile 中,
其他也可以加上手機號碼,公司電話等等相關欄位。
特別要注意的是,
在與 USER 欄位關聯時,必須加上
on_delete=models.CASCADE
在刪除 USER Model 的時候相對應的 UserProfile 才會跟著刪除,
避免不必要的錯誤發生。
使用上也很簡單,
def my_profile(request):
target_item = UserProfile.objects.get(user=request.user)
先取得目前登入使用者的 profile,
就能直接使用新增的欄位 real_name
target_item.real_name
若網站已經上線一段時間,
原有的 USER Model 已經有許多資料,
為了新增額外的欄位以此種方式最為適合與簡單,
既不影響原有的資料,
又能根據需求新增相關欄位。
另一個方法則是使用 AbstractBaseUser / AbstractUser 直接自訂 USER Model 欄位,
相對地使用上較為複雜,
就不再此入門的範疇探討,
有機會再介紹此種方法。
沒有留言:
張貼留言