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

时间:2009-10-29 10:31:06

标签: python django

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

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

User.clients.filter(name='Test')

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

2 个答案:

答案 0 :(得分:18)

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

from django.contrib.auth.models import User
User.add_to_class('clients', ClientsManager())

如果你正在使用Django 1.1+,你也可以使用proxy model对User进行子类化;不会影响数据库,但会允许您在没有monkeypatch的情况下附加额外的经理。

答案 1 :(得分:-2)

您可以为此用户配置文件

  

AUTH_PROFILE_MODULE =   'accounts.UserProfile'

     

用户个人资料模型时   以这种方式定义和指定,   每个User对象都有一个方法 -   get_profile() - 返回   用户配置文件模型的实例   与该用户相关联。

或者您可以自己编写authenticate backend。在设置

中添加了它