django 解決擴展自帶User表遇到的問題
首先要擴展自帶的auth_user表我就放個圖吧,

同時setting中應(yīng)該設(shè)置:
# 此處重載是為了使UserProfile生效
AUTH_USER_MODEL = "EcdsApp.UserProfile"
本人的項目需要對此表進(jìn)行擴展,再建兩個子表關(guān)聯(lián)這個表,關(guān)聯(lián)關(guān)系為一對一:
修改完成之后進(jìn)行子表關(guān)聯(lián):
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)
直接關(guān)聯(lián)肯定會報錯,此時加入上面兩段代碼,
第一個是引入 setting
第二個是在關(guān)聯(lián)字段哪里將原有的User 更換為setting.AUTH_USER_MODEL
此時再次遷移應(yīng)該就能成功了,
能夠遷移成功但是還會有問題。
我后面的功能代碼中原先寫的有用到;User這個表的地方,代碼運行到這里就會出錯。
報錯信息如下
AttributeError: Manager isn't available; 'auth.User' has been swapped for 'EcdsApp.UserProfile'
原因是原User表已經(jīng)發(fā)生改變這里也需要變動一下:
from django.contrib.auth import get_user_model
User = get_user_model()
直接將這兩行加入到你所有使用到原User表的py文件中,基本問題就可以解決!
補充知識:Python+ django + pycharm項目之?dāng)U展默認(rèn)user表
django為我們提供了默認(rèn)的user表,但是在實際的開發(fā)項目的基本是不滿足實際情況的,所以呢學(xué)習(xí)web知識,擴展默認(rèn)user表是必不可少的一部分,雖然很簡單,但是呢還是在此來加深下自己的記憶。
在django項目中,所有的數(shù)據(jù)庫表都是根據(jù)各APP的模型來生成的,我們創(chuàng)建項目后第一件事就是要去完善user表,這個利用的知識點就是Python類的繼承,假如,我要創(chuàng)建UserProfile類來繼承原來的AbstractUser類,從而繼承原來user表的字段,又可以增加自己需要的字段:
在users 用戶app的models.py做如下的修改:
from django.db import models
from django.contrib.auth.models import AbstractUser # 引入原來的Abstract類
# 創(chuàng)建新的類來繼承原來的類,并拓展自己的字段
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='聯(lián)系電話', null=True, 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中代碼后,需要注冊你創(chuàng)建的app,django中是如何來識別你創(chuàng)建的APP呢,查看各APP的apps,py文件

文件中的name=‘users'代表著django可以識別該名稱為這個APP的名稱,于是就可以在settings.py文件中進(jìn)行注冊APP了:

還需要配置一個參數(shù):AUTH_USER_MODEL = 'users.UserProfile'

最后遷移數(shù)據(jù)庫,使用makemigrations 和 migrate 就可以完成user表的擴展了,刷新數(shù)據(jù)庫,表是不是已經(jīng)生成了0.0
以上這篇django 解決擴展自帶User表遇到的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python實現(xiàn)學(xué)生信息管理系統(tǒng)(精簡版)
這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)學(xué)生信息管理系統(tǒng)的精簡版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-11-11
如何不用安裝python就能在.NET里調(diào)用Python庫
這篇文章主要介紹了如何不用安裝python就能在.NET里調(diào)用Python庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07
Jmeter通過OS進(jìn)程取樣器調(diào)用Python腳本實現(xiàn)參數(shù)互傳
這篇文章主要介紹了Jmeter通過OS進(jìn)程取樣器調(diào)用Python腳本實現(xiàn)參數(shù)互傳,描述在cmd中調(diào)用上面的Python腳本并傳入兩個參數(shù)展開主題,具有一定的參考價值,需要的小伙伴可以參考一下2022-03-03
Python?第三方opencv庫實現(xiàn)圖像分割處理
這篇文章主要介紹了Python?第三方opencv庫實現(xiàn)圖像分割處理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-06-06

