使用django自帶的user做外鍵的方法
一、使用django自帶的user做外鍵,可以直接在model中使用。只需導(dǎo)入settings模塊
使用方法:
在app應(yīng)用(此處是Product應(yīng)用)中的models.py文件,導(dǎo)入settings模塊
# Product / models.py from django.db import models from django.contrib.auth import settings class Product(models.Model): productName = models.CharField('產(chǎn)品名稱(chēng)', max_length=20) productDescription = models.CharField('產(chǎn)品描述', max_length=100) producer = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='負(fù)責(zé)人', on_delete=models.SET_NULL,blank=True, null=True) createTime = models.DateTimeField('創(chuàng)建時(shí)間', auto_now=True) class Meta: verbose_name = '產(chǎn)品管理' verbose_name_plural = '產(chǎn)品管理' def __str__(self): return self.productName
二、自定義User Model
方法一、擴(kuò)展AbstractUser類(lèi):只增加字段
app/models.py
from django.contrib.auth.models import AbstractUser from django.db import models class NewUser(AbstractUser): new_field = models.CharField(max_length=100)
同時(shí),需要在global_settings文件中設(shè)置:
AUTH_USER_MODEL = "app.NewUser"
方法二、擴(kuò)展AbstractBaseUser類(lèi)
AbstractBaseUser中只包含3個(gè)field: password, last_login和is_active. 擴(kuò)展方式同上
# django.contrib.auth.base_user class AbstractBaseUser(models.Model): password = models.CharField(_('password'), max_length=128) last_login = models.DateTimeField(_('last login'), blank=True, null=True) is_active = True REQUIRED_FIELDS = [] # Stores the raw password if set_password() is called so that it can # be passed to password_changed() after the model is saved. _password = None class Meta: abstract = True def __str__(self): return self.get_username() def save(self, *args, **kwargs): super().save(*args, **kwargs) if self._password is not None: password_validation.password_changed(self._password, self) self._password = None def get_username(self): """Return the username for this User.""" return getattr(self, self.USERNAME_FIELD) def clean(self): setattr(self, self.USERNAME_FIELD, self.normalize_username(self.get_username())) def natural_key(self): return (self.get_username(),) @property def is_anonymous(self): """ Always return False. This is a way of comparing User objects to anonymous users. """ return False @property def is_authenticated(self): """ Always return True. This is a way to tell if the user has been authenticated in templates. """ return True def set_password(self, raw_password): self.password = make_password(raw_password) self._password = raw_password def check_password(self, raw_password): """ Return a boolean of whether the raw_password was correct. Handles hashing formats behind the scenes. """ def setter(raw_password): self.set_password(raw_password) # Password hash upgrades shouldn't be considered password changes. self._password = None self.save(update_fields=["password"]) return check_password(raw_password, self.password, setter) def set_unusable_password(self): # Set a value that will never be a valid hash self.password = make_password(None) def has_usable_password(self): """ Return False if set_unusable_password() has been called for this user. """ return is_password_usable(self.password) def get_session_auth_hash(self): """ Return an HMAC of the password field. """ key_salt = "django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash" return salted_hmac(key_salt, self.password).hexdigest() @classmethod def get_email_field_name(cls): try: return cls.EMAIL_FIELD except AttributeError: return 'email' @classmethod def normalize_username(cls, username): return unicodedata.normalize('NFKC', username) if isinstance(username, str) else username
到此這篇關(guān)于使用django自帶的user做外鍵的方法的文章就介紹到這了,更多相關(guān)django user做外鍵內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Django與pyecharts結(jié)合的實(shí)例代碼
- Django中從mysql數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)傳到echarts方式
- django echarts餅圖數(shù)據(jù)動(dòng)態(tài)加載的實(shí)例
- Django數(shù)據(jù)模型中on_delete使用詳解
- Django數(shù)據(jù)統(tǒng)計(jì)功能count()的使用
- 在pycharm中使用pipenv創(chuàng)建虛擬環(huán)境和安裝django的詳細(xì)教程
- Django 用戶認(rèn)證Auth組件的使用
- 基于Django快速集成Echarts代碼示例
相關(guān)文章
在Python中f-string的幾個(gè)技巧,你都知道嗎
f-string想必很多Python用戶都基礎(chǔ)性的使用過(guò),但是百分之九十的人不知道?在Python中f-string的幾個(gè)技巧,今天就帶大家一起看看Python f-string技巧大全,需要的朋友參考下吧2021-10-10pyspark創(chuàng)建DataFrame的幾種方法
為了便于操作,使用pyspark時(shí)我們通常將數(shù)據(jù)轉(zhuǎn)為DataFrame的形式來(lái)完成清洗和分析動(dòng)作。那么你知道pyspark創(chuàng)建DataFrame有幾種方法嗎,下面就一起來(lái)了解一下2021-05-05Python算法練習(xí)之二分查找算法的實(shí)現(xiàn)
二分查找也稱(chēng)折半查找(Binary Search),它是一種效率較高的查找方法。本文將介紹python如何實(shí)現(xiàn)二分查找算法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2022-06-06詳解python多線程、鎖、event事件機(jī)制的簡(jiǎn)單使用
這篇文章主要介紹了詳解python多線程、鎖、event事件機(jī)制的簡(jiǎn)單使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04Python基礎(chǔ)學(xué)習(xí)之反射機(jī)制詳解
在Python中,反射是指通過(guò)一組內(nèi)置的函數(shù)和語(yǔ)句,在運(yùn)行時(shí)動(dòng)態(tài)地訪問(wèn)、檢查和修改對(duì)象的屬性、方法和類(lèi)信息的機(jī)制。本文將通過(guò)簡(jiǎn)單的示例和大家講講Python中的反射機(jī)制,希望對(duì)大家有所幫助2023-03-03Python日期時(shí)間模塊datetime詳解與Python 日期時(shí)間的比較,計(jì)算實(shí)例代碼
python中的datetime模塊提供了操作日期和時(shí)間功能,本文為大家講解了datetime模塊的使用方法及與其相關(guān)的日期比較,計(jì)算實(shí)例2018-09-0912個(gè)Python程序員面試必備問(wèn)題與答案(小結(jié))
這篇文章主要介紹了12個(gè)Python程序員面試必備問(wèn)題與答案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-06-06分析python并發(fā)網(wǎng)絡(luò)通信模型
隨著互聯(lián)網(wǎng)和物聯(lián)網(wǎng)的高速發(fā)展,使用網(wǎng)絡(luò)的人數(shù)和電子設(shè)備的數(shù)量急劇增長(zhǎng),其也對(duì)互聯(lián)網(wǎng)后臺(tái)服務(wù)程序提出了更高的性能和并發(fā)要求。本文主要分析比較了一些模型的優(yōu)缺點(diǎn),并且用python來(lái)實(shí)現(xiàn)2021-06-06