用户模型的Django自定义管理器

Jos*_*ose 9 python django

如何使用自定义管理器扩展默认用户模型?

我的应用程序有许多用户类型,将使用内置的组模型进行定义.因此,用户可能是客户,工作人员等等.能够做到这样的事情是理想的:

User.clients.filter(name='Test')
Run Code Online (Sandbox Code Playgroud)

为所有客户端命名为Test.我知道如何使用自定义管理器为用户定义的模型做到这一点,但我不知道如何继续使用用户模型,同时仍然保留所有的好吃的东西,至少没有修改django源代码本身哪个不是不......

Car*_*yer 18

是的,您可以直接将自定义管理器添加到User类.这是monkeypatching,它确实使您的代码不易维护(有人试图找出您的代码可能不知道User类在哪里获得该自定义管理器,或者他们可以找到它的位置).在这种情况下,它相对无害,因为您实际上并没有覆盖User类的任何现有行为,只是添加了一些新的东西.

from django.contrib.auth.models import User
User.add_to_class('clients', ClientsManager())
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Django 1.1+,您还可以使用代理模型对 User进行子类化; 不会影响数据库,但会允许您在没有monkeypatch的情况下附加额外的管理器.

  • @JoseJose请将此答案标记为正确 (2认同)

Odu*_*van -2

您可以为此使用个人资料

AUTH_PROFILE_MODULE = 'accounts.UserProfile'

当以这种方式定义和指定用户配置文件模型时,每个用户对象将有一个方法——get_profile()——它返回与该用户关联的用户配置文件模型的实例。

或者您可以编写自己的身份验证后端。在设置里添加了