【问题标题】:How do i extend Django's auth user manager to add a method of my own?如何扩展 Django 的身份验证用户管理器以添加我自己的方法?
【发布时间】:2021-12-20 18:56:21
【问题描述】:

我正在使用 Python 3.9 和 Django 3.2。我想使用 Django 的 auth 模块进行基本用户管理,并已将其添加到我的 settings.py 文件中

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'cbapp',
]

但是,我想将其用户表的主键更改为 UUID,然后添加我自己的方法,所以我在 models/custom_user.py 中创建了这个文件

from django.contrib.auth.models import AbstractUser
from django.db import models


class CustomeUserManager(models.Manager):
    def get_active_users(self):
        qset = CustomUser.objects.filter(
            is_active=True
        )
        return list(qset)
        

class CustomUser(AbstractUser):
    pass
    uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

    objects = CustomeUserManager()

虽然我仍然想访问 Django 的原始身份验证方法,但似乎我无法再访问它们,例如“create_user”...

>>> user = CustomUser.objects.create_user('Dave', 'myemail@test.com', 'johnpassword')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
    user = CustomUser.objects.create_user('Dave', 'myemail@test.com', 'johnpassword')
AttributeError: 'CustomeUserManager' object has no attribute 'create_user'

在添加我自己的一些方法的同时扩展 Django 的 auth 用户方法的正确方法是什么?

【问题讨论】:

    标签: python-3.x django django-authentication django-users


    【解决方案1】:

    这些是在UserManager [Django-doc] 中指定的,因此您应该从UserManager 继承而不是简单的Manager

    from django.contrib.auth.models import UserManager
    
    class CustomeUserManager(UserManager):
        def get_active_users(self):
            return CustomUser.objects.filter(
                is_active=True
            )

    我强烈建议不要返回一个列表,而是为您的get_active_users 返回一个QuerySetQuerySet 可以进一步过滤,因此不会进行数据库查询,以后应该在 Django/Python 层进行后处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 2018-12-16
      • 2023-04-10
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 2012-08-29
      相关资源
      最近更新 更多