如何使用自定义管理器扩展默认用户模型?
我的应用程序有许多用户类型,将使用内置的组模型进行定义.因此,用户可能是客户,工作人员等等.能够做到这样的事情是理想的:
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的情况下附加额外的管理器.
| 归档时间: |
|
| 查看次数: |
2520 次 |
| 最近记录: |