2012-08-16 2 views
1

사용자가 로그인 할 때 DB 행을 작성해야합니다. 다음 코드는 models.py에 있습니다 (파일 끝, 모델 정의 후);Django에서 user_logged_in 신호에 등록 된 콜백 함수의 모델을 참조 할 수 없습니다.

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.py의 콜백 함수에 간단한 파일 쓰기를 시도하고 u_audit() 함수에서 같은 것을 시도했다. 대신 제대로 작동하므로 제대로 호출되고 있음을 알고 있습니다. 나는 다른 시그널 콜백 함수를 등록했다. (모든 포스트 - 로그인) 모델을 사용하고 잘 작동한다.

+0

utils.py에서''UserLog''를 가져 왔습니까? –

+0

예 - 모델입니다. ** app.models에서 ** 모델에 포함 된 모델 ** –

답변

1

원형 가져 오기가 아닙니까? Utils는 utils에 대한 모델과 모델을 말하며 작동하지 않습니다.

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

뿐만 아니라 그런 일이 u_audit에 대한 어쩌면 models.py이 좋은 장소를 제안하고 당신은 그냥 이동해야합니다에 utils.py 변경하십시오.

+0

... 한숨 ... 예 - 감사합니다. 분명히이 코드를 너무 오래 꼼짝 않고 바라 보았습니다. 당신 말이 맞습니다 -이 문제는 과도한 열성적인 수입으로 인한 것입니다. ** models.py **에서 특정 ** utils ** 호출에 필요한 수입 만 축소했습니다. ** utils.py **는'models import *'에서도 사용 했으므로 예 - 순환 참조. Python/Django가 위에서 설명한 오류 이외에 어떤 방식 으로든 불평하지 않는다는 것이 조금 이상하다는 것을 알았지 만, 내가 예상 했어야했는지를 알기에는 그들에게 익숙하지 않았습니다. 미래의 ref를 위해 이것은 장고 1.4와 함께 파이썬 2.6.6이다. –

+0

걱정하지 마라. 나는 항상 그것들을 발견하기가 어렵고, 나는 그것들을 많이 보았다.) 그리고 나는 파이썬이 그것을보고하는 방식이별로 도움이되지 않는다는 것에 동의하지만 파이썬의 수입 방식을 파헤 치면 명확해진다. 이것이 왜이 특별한 오류일까요? – jasisz