我正在尝试为我的Django User模型添加一些自定义逻辑,并尝试使用代理用户模型.
我有一个这样的模型:
from django.contrib.auth.models import User
class CustomUser(User):
def custom_method(self):
return 'Something'
class Meta:
proxy = True
Run Code Online (Sandbox Code Playgroud)
如果我省略了AUTH_USER_MODEL设置,那么我就可以运行Django shell并非常愉快地使用CustomUser,但是,我认为我可以在我的设置中设置AUTH_USER_MODEL,这样这就是我的应用程序中的默认用户(如当你使用完全自定义的用户模型时),但事实并非如此,当我尝试使用AUTH_USER_MODEL设置运行时,我得到:
TypeError: CustomUser cannot proxy the swapped model 'myapp.CustomUser'
Run Code Online (Sandbox Code Playgroud)
这可能吗?谢谢!
设置AUTH_USER_MODEL自定义类和使用代理模型是自定义 Django 用户模型行为的两种不同方法。您看到该错误是因为您将它们混合在一起,这是没有意义的。
方法一:
如果你设置了AUTH_USER_MODEL='myapp.CustomUser',那么你不应该代理任何东西。像这样定义您的自定义用户模型:
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
pass
Run Code Online (Sandbox Code Playgroud)
方法2:
像上面一样代理 Django 用户模型。不要设置AUTH_USER_MODEL。在您的代码中,确保始终导入和使用您的CustomUser类。
在这两种方法之间,如果您要开始一个新项目,则首选#1(自定义模型),因为它为您提供了最大的控制权。但是,如果您已经有一个正在运行的项目,那么迁移到其他模型会有点棘手,因此方法#2(代理模型)可能是您能做的最好的选择。
有关更多详细信息,请参阅https://docs.djangoproject.com/en/3.2/topics/auth/customizing/#extending-the-existing-user-model 。
Dan*_*man -4
您不妨使用继承自 AbstractUser 的完全自定义用户。它的功能与您在这里尝试的功能完全相同。
| 归档时间: |
|
| 查看次数: |
1746 次 |
| 最近记录: |