当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。