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