详解Django的 get_user_model() 函数:获取用户模型

  • Post category:Python

下面是关于Django的get_user_model()函数的详细讲解。

get_user_model()函数简介

get_user_model()是Django模型类中的一个函数,它可以从你的项目中的AUTH_USER_MODEL定义中动态地获取用户模型(User model)。

在Django中,用户模型是定义了系统中用户的基本信息及其认证凭证等的一个模型。对于大多数基于Django的Web应用程序来说,系统中的用户模型都是至关重要的。作为Django的开发人员,我们通常会修改用户模型以满足需要,比如添加一些自定义字段。而通过get_user_model()函数可以非常灵活地使用已经定义的用户模型。

使用方法攻略

定义一个自定义的用户模型

为了使用get_user_model()函数,我们先需要定义一个自定义的用户模型,通过修改settings.py文件中的AUTH_USER_MODEL来实现。

假设我们在一个blog应用中定义了一个自定义的用户模型User:

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    nickname = models.CharField(max_length=50, blank=True)

接着在settings.py文件中将AUTH_USER_MODEL设置为’blog.User’:

AUTH_USER_MODEL = 'blog.User'

注意:如果你在项目创建之初就想使用自定义的用户模型,应该在创建Django项目时使用”–user-model=blog.User”选项来定义,而不是在已经创建的项目中修改AUTH_USER_MODEL。

使用get_user_model()获取用户模型

获取一个项目中的自定义的User模型很简单,只需要调用get_user_model()函数即可:

from django.contrib.auth import get_user_model
User = get_user_model()

通过这个方法,我们可以在任何地方引用User模型,不需要像以前那样硬编码user模型。

实例说明

实例1:在视图函数中使用get_user_model()

假设我们要编写一个视图函数,要获取所有用户的昵称,并将它们返回给前端展示。

from django.shortcuts import render
from django.contrib.auth import get_user_model

def user_list(request):
    User = get_user_model()
    users = User.objects.all()
    nicknames = [user.nickname for user in users]
    context = {'nicknames': nicknames}
    return render(request, 'user_list.html', context)

实例2:在管理后台中使用get_user_model()

我们可以在Admin中使用get_user_model()来配置用户管理界面。假设我们为User模型中加入了一个字段”city”,现在我们想要在管理后台中查看和编辑这个字段。

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth import get_user_model

class MyUserAdmin(UserAdmin):
    User = get_user_model()
    fieldsets = UserAdmin.fieldsets + (
        (None, {'fields': ('city',)}),
    )

admin.site.register(User, MyUserAdmin)

这样,在管理后台中的用户管理界面就可以看到city字段了。