我如何扩展 Django 的 auth 用户管理器以添加我自己的方法?
How do i extend Django's auth user manager to add a method of my own?
我正在使用 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',
]
但是,我想将其用户 table 的主键更改为 UUID,然后添加我自己的方法,所以我在 models/custom_user.py[=13 创建了这个文件=]
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 用户方法的正确方法是什么?
这些在 UserManager
[Django-doc] 中指定,因此您应该继承 UserManager
而不是简单的 Manager
:
from django.contrib.auth.models import <strong>UserManager</strong>
class CustomeUserManager(<strong>UserManager</strong>):
def get_active_users(self):
return CustomUser.objects.filter(
is_active=True
)
我强烈建议不要return一个列表,而是QuerySet
给你的get_active_users
。 QuerySet
可以进一步过滤,因此不会进行数据库查询,之后应该在 Django/Python 层进行 post 处理。
我正在使用 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',
]
但是,我想将其用户 table 的主键更改为 UUID,然后添加我自己的方法,所以我在 models/custom_user.py[=13 创建了这个文件=]
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 用户方法的正确方法是什么?
这些在 UserManager
[Django-doc] 中指定,因此您应该继承 UserManager
而不是简单的 Manager
:
from django.contrib.auth.models import <strong>UserManager</strong>
class CustomeUserManager(<strong>UserManager</strong>):
def get_active_users(self):
return CustomUser.objects.filter(
is_active=True
)
我强烈建议不要return一个列表,而是QuerySet
给你的get_active_users
。 QuerySet
可以进一步过滤,因此不会进行数据库查询,之后应该在 Django/Python 层进行 post 处理。