如何使用自定义管理器扩展默认用户模型?
我的应用程序有许多用户类型,将使用内置的组模型进行定义。因此,用户可能是客户,工作人员等等。能够做到这样的事情是理想的:
User.clients.filter(name='Test')
获取名为Test的所有客户端。我知道如何使用自定义管理器为用户定义的模型做到这一点,但我不知道如何继续使用用户模型,同时仍然保留所有的好吃的东西,至少没有修改django源代码本身就是一个不行......
答案 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。在设置
中添加了它