Django代理用户模型示例

时间:2014-08-05 17:01:40

标签: python django

我正在尝试为我的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'

这可能吗?谢谢!

2 个答案:

答案 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继承的完全自定义用户。这与你在这里尝试的功能完全相同。