无法引用在Django中注册到user_logged_in信号的回调函数中的模型

时间:2012-08-16 10:49:22

标签: django django-signals

我需要在用户登录时编写数据库行。以下代码位于models.py中(在文件末尾,模型定义之后);

models.py

from django.contrib.auth.signals import user_logged_in
from utils import *
def rec_login(sender, request, user, **kwargs):
    u_audit('some text here', user)    

user_logged_in.connect(rec_login)

有一个在modules.py中导入的实用程序模块。以上代码在utils.py中从上面的函数中调用;

utils.py

from app.models import *
def u_audit(msg,u):
    ua=UserLog(action=msg, user=u, actiontime=datetime.now())
    ua.save()

我正在其他几个地方重新使用u_audit()函数(登录后)。

当用户登录时,我得到UserLog对象的NameError(即看起来信号回调函数无法访问模型定义)。

上面提到的UserLog对象只是一个简单的models.Model。

任何人都知道我缺少什么?

我尝试在models.py的回调函数中添加一个简单的文件写入,并在u_audit()函数中尝试了相同的操作。相反,这工作正常,所以我知道它被正确调用。我已经注册了其他信号回调函数(所有登录后),他们正在使用模型并正常工作。

1 个答案:

答案 0 :(得分:1)

不是循环导入? Utils指的是工具的模型和模型 - 它不起作用。请将utils.py更改为:

def u_audit(msg,u):
    from app.models import UserLog
    ua=UserLog(action=msg, user=u, actiontime=datetime.now())
    ua.save()

但也有类似的建议,也许models.py是u_audit的好地方,你应该把它移到那里。