有人能给我看一个如何在Django中使用threadlocals的例子吗?

时间:2013-03-14 18:16:34

标签: python django django-admin thread-local

基本上,我正在尝试访问其中一个应用中的models.py中的当前用户。我已经读过你不应该这样做以及你应该如何在views.py等中做到这一点。我想要完成的只是利用Django管理员后端,意思是观点完全不使用.py。

这就是我转向threadlocals的原因。我已经查看了很多与此有关的问题,我发现这是一个死链接:http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser

坦率地说,我很难过,希望有人可以向我提供有关如何使用threadlocals的一些信息,包括我需要添加到settings.py的设置以及我需要制作的文件的详细信息。

1 个答案:

答案 0 :(得分:2)

根据评论,如果您的Entry模型具有User的外键,则无需使用threadlocals以获取有关用户的所有信息。模型已保存或删除。

Signals子框架将为您提供所需的能力。例如,pre_delete可用于在删除对象之前发送电子邮件。在创建或更新条目后,可以发送post_save

信号处理程序将接收触发信号的对象实例,您将能够访问用户对象,包括用于发送电子邮件的所有属性。虽然只有User的id存储在数据库中,但Django将允许您通过ForeignKey字段访问整个对象。

[编辑]

要在信号处理程序中获取对象实例,请从传递给处理程序的kwargs中检索它:

def my_callback(sender, **kwargs):
    instance = kwargs.get('instance')
    # you can now reference instance.user
    # send email code here