當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python Django get_user_model用法及代碼示例


本文介紹 django.contrib.auth.get_user_model 的用法。

聲明

get_user_model()

您應該使用 django.contrib.auth.get_user_model() 來引用用戶模型,而不是直接引用 User 。此方法將返回當前活動的用戶模型 - 如果指定了自定義用戶模型,則返回 User

當您為用戶模型定義外鍵或多對多關係時,您應該使用 AUTH_USER_MODEL 設置指定自定義模型。例如:

from django.conf import settings
from django.db import models

class Article(models.Model):
    author = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    )

連接到用戶模型發送的信號時,您應該使用 AUTH_USER_MODEL 設置指定自定義模型。例如:

from django.conf import settings
from django.db.models.signals import post_save

def post_save_receiver(sender, instance, created, **kwargs):
    pass

post_save.connect(post_save_receiver, sender=settings.AUTH_USER_MODEL)

一般來說,在導入時執行的代碼中使用 AUTH_USER_MODEL 設置來引用用戶模型是最容易的,但是,也可以在Django導入模型時調用get_user_model(),所以你可以使用models.ForeignKey(get_user_model(), ...)

如果您的應用使用多個用戶模型進行了測試,例如使用 @override_settings(AUTH_USER_MODEL=...),並且您將 get_user_model() 的結果緩存在 module-level 變量中,您可能需要偵聽 setting_changed 信號以清除緩存。例如:

from django.apps import apps
from django.contrib.auth import get_user_model
from django.core.signals import setting_changed
from django.dispatch import receiver

@receiver(setting_changed)
def user_model_swapped(**kwargs):
    if kwargs['setting'] == 'AUTH_USER_MODEL':
        apps.clear_cache()
        from myapp import some_module
        some_module.UserModel = get_user_model()

相關用法


注:本文由純淨天空篩選整理自djangoproject.com大神的英文原創作品 django.contrib.auth.get_user_model。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。