使用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)品名稱', 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)建時間', auto_now=True)
class Meta:
verbose_name = '產(chǎn)品管理'
verbose_name_plural = '產(chǎn)品管理'
def __str__(self):
return self.productName

二、自定義User Model
方法一、擴(kuò)展AbstractUser類:只增加字段
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)
同時,需要在global_settings文件中設(shè)置:
AUTH_USER_MODEL = "app.NewUser"
方法二、擴(kuò)展AbstractBaseUser類
AbstractBaseUser中只包含3個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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pytest通過assert進(jìn)行斷言的實現(xiàn)
assert斷言是一種用于檢查代碼是否按預(yù)期工作的方法,在pytest中,assert斷言可以用于測試代碼的正確性,以確保代碼在運行時按照預(yù)期工作,本文就來介紹一下如何使用,感興趣的可以了解下2023-12-12
Python中.py文件打包成exe可執(zhí)行文件詳解
這篇文章主要給大家介紹了在Python中.py文件打包成exe可執(zhí)行文件的相關(guān)資料,文中介紹的非常詳細(xì),相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-03-03
python人工智能深度學(xué)習(xí)入門邏輯回歸限制
這篇文章主要為大家介紹了python人工智能深度學(xué)習(xí)入門之邏輯回歸限制的詳細(xì)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11
pytorch中的nn.ZeroPad2d()零填充函數(shù)實例詳解
這篇文章主要介紹了pytorch中的nn.ZeroPad2d()零填充函數(shù)實例詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
Python(TensorFlow框架)實現(xiàn)手寫數(shù)字識別系統(tǒng)的方法
這篇文章主要介紹了Python(TensorFlow框架)實現(xiàn)手寫數(shù)字識別系統(tǒng)的方法。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05

