1. 程式人生 > 程式設計 >django 解決擴充套件自帶User表遇到的問題

django 解決擴充套件自帶User表遇到的問題

首先要擴充套件自帶的auth_user表我就放個圖吧,

django 解決擴充套件自帶User表遇到的問題

同時setting中應該設定:

# 此處過載是為了使UserProfile生效
AUTH_USER_MODEL = "EcdsApp.UserProfile"

本人的專案需要對此表進行擴充套件,再建兩個子表關聯這個表,關聯關係為一對一:

修改完成之後進行子表關聯:

from django.contrib.auth.models import AbstractUser,User
from django.conf import settings
class UserInfo(models.Model):
  user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)

直接關聯肯定會報錯,此時加入上面兩段程式碼,

第一個是引入 setting

第二個是在關聯欄位哪裡將原有的User 更換為setting.AUTH_USER_MODEL

此時再次遷移應該就能成功了,

能夠遷移成功但是還會有問題。

我後面的功能程式碼中原先寫的有用到;User這個表的地方,程式碼執行到這裡就會出錯。

報錯資訊如下

AttributeError: Manager isn't available; 'auth.User' has been swapped for 'EcdsApp.UserProfile'

原因是原User表已經發生改變這裡也需要變動一下:

from django.contrib.auth import get_user_model

User = get_user_model()

直接將這兩行加入到你所有使用到原User表的py檔案中,基本問題就可以解決!

補充知識:Python+ django + pycharm專案之擴充套件預設user表

django為我們提供了預設的user表,但是在實際的開發專案的基本是不滿足實際情況的,所以呢學習web知識,擴充套件預設user表是必不可少的一部分,雖然很簡單,但是呢還是在此來加深下自己的記憶。

在django專案中,所有的資料庫表都是根據各APP的模型來生成的,我們建立專案後第一件事就是要去完善user表,這個利用的知識點就是Python類的繼承,假如,我要建立UserProfile類來繼承原來的AbstractUser類,從而繼承原來user表的欄位,又可以增加自己需要的欄位:

在users 使用者app的models.py做如下的修改:

from django.db import models
 
from django.contrib.auth.models import AbstractUser  # 引入原來的Abstract類
 
# 建立新的類來繼承原來的類,並拓展自己的欄位
class UserProfile(AbstractUser):
  nick_name = models.CharField(max_length=20,verbose_name='暱稱')
  birthday = models.DateField(verbose_name='生日',null=True,blank=True)
  gender = models.CharField(choices=(('male','男'),('female','女')),verbose_name='性別',default='feamale',max_length=10)
  address = models.CharField(max_length=50,verbose_name='地址',default='')
  mobile = models.CharField(max_length=11,verbose_name='聯絡電話',blank=True)
  image = models.ImageField(upload_to='image/%Y/%m',default='image/default.png',max_length=100)
 
  class Meta:
    verbose_name = '使用者資訊'
    verbose_name_plural = verbose_name
 
  def __str__(self):
    return self.username

修改了models.py中程式碼後,需要註冊你建立的app,django中是如何來識別你建立的APP呢,檢視各APP的apps,py檔案

django 解決擴充套件自帶User表遇到的問題

檔案中的name=‘users'代表著django可以識別該名稱為這個APP的名稱,於是就可以在settings.py檔案中進行註冊APP了:

django 解決擴充套件自帶User表遇到的問題

還需要配置一個引數:AUTH_USER_MODEL = 'users.UserProfile'

django 解決擴充套件自帶User表遇到的問題

最後遷移資料庫,使用makemigrations 和 migrate 就可以完成user表的擴充套件了,重新整理資料庫,表是不是已經生成了0.0

以上這篇django 解決擴充套件自帶User表遇到的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。