Django 自訂 USER Model 範例教學

首頁 >> Research >> 網頁設計 >> Django 自訂 USER Model 範例教學

在 Django 中預設有 User Model ,

內建有幾個基本的欄位

  • username
  • first_name
  • last_name
  • email
  • 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 欄位,

相對地使用上較為複雜,

就不再此入門的範疇探討,

有機會再介紹此種方法。



================================
分享與讚美,是我們繼續打拼的原動力.
若文章對您有幫助,望請不吝按讚或分享.
或者對影片有興趣可以訂閱頻道接收通知
================================
YouTube 頻道
FB 粉絲專頁
================================

guangyaw

重點主題: 程式設計: Python , Django,Android 工具與軟體: Open edX,Linux工具,Blender教學 分享各地美景與產品使用心得,遊戲實況,甚至影視戲劇等, 您的訂閱就是頻道成長的原動力。 YouTube 頻道: https://youtube.com/xyawli

You may also like...

發表迴響