laj*_*rre 0 python django django-users django-1.5
它写在文档中:
自定义用户模型的另一个限制是您不能使用django.contrib.auth.get_user_model()作为信号处理程序的发送方或目标.相反,您必须使用生成的用户模型注册处理程序.有关注册发送信号的更多信息,请参阅信号.
我想这意味着你可以做到以下几点:
from django.contrib.auth import get_user_model
User = get_user_model()
@receiver(post_save, sender=User)
def user_saved(sender=None, instance=None, **kwargs):
# something
Run Code Online (Sandbox Code Playgroud)
不是吗?我只是想知道我是否理解得很好(我不明白为什么他们说这是一个"限制",但无论如何,只是想检查).
这是因为在创建信号时对象尚未"安装",因此get_user_model()无法找到连接信号处理程序所需的对象.
有关如何找到它以及问题是什么的详细信息,请参阅此错误.
您的示例无效,因为此get_user_model()调用将失败.现在,使信号处理程序与自定义User类一起工作的唯一方法是直接命名它而不使用get_user_model(),例如
@receiver(post_save, sender=myapp.MyUserModel) # can't use get_user_model() here
def user_saved(sender=None, instance=None, **kwargs):
# something
Run Code Online (Sandbox Code Playgroud)
您的编码风格也可以用于某些工作:当您运行User = get_user_model()时,会创建一个调用的变量User,其值设置为get_user_model()函数调用的结果.Python约定(以及大多数其他语言的约定)是普通变量以小写字母开头,而类以大写字母开头.
因此user = get_user_model(),稍后使用该user变量对于阅读代码的任何人都会更有意义,并有助于避免将来出现混淆.
| 归档时间: |
|
| 查看次数: |
601 次 |
| 最近记录: |