1

当用户登录时,我需要编写一个 DB 行。以下代码在 models.py 中(在文件末尾,在模型定义之后);

模型.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 中调用了以下代码;

实用程序.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() 函数中尝试了同样的事情。相反,它工作正常,所以我知道它被正确调用了。我已经注册了其他信号回调函数(所有登录后),它们正在使用模型并且工作正常。

4

1 回答 1

1

不是循环导入?Utils 将模型和模型引用到 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 的好地方,你应该把它移到那里。

于 2012-08-16T11:24:33.177 回答