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

  • Post category:Python

get_user_model()函数是Django框架中的一个重要函数,它的主要作用是获取Django中用户模型(User Model),即settings.py中被定义的AUTH_USER_MODEL。

在Django中,如果要自定义用户模型(如增加字段等),需要通过继承AbstractBaseUser和BaseUserManager类来实现。通过get_user_model()函数,我们可以获取到AUTH_USER_MODEL所指向的用户模型。

该函数通常用于在Django应用程序中创建/引用用户模型的场景,一般放在models.py文件中的外部导入部分,如下所示:

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

通过上述代码,我们可以在不知道用户模型类名的情况下,获取到用户模型类,并实例化其对象进行操作。

以下是两个实例:

  1. 在创建某个用户关联的信息模型时,需要用到该用户模型的主键,可以通过get_user_model()获取
from django.db import models
from django.contrib.auth import get_user_model

User = get_user_model()

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    age = models.IntegerField()
    # 其他字段...
  1. 在视图函数中获取当前已登录的用户对象
from django.contrib.auth import get_user_model
from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    User = get_user_model()
    user_id = request.session.get('user_id')
    if not user_id:
        return HttpResponse('请先登录')

    user = User.objects.get(id=user_id)
    return render(request, 'index.html', {'username': user.username})

在上述代码中,我们通过get_user_model()获取了用户模型类,并通过查询session中存储的用户id获取当前已登录用户对象。最后将用户名传递到模板中展示。