在Django中,我想在Model中调用类的调用栈;随叫随到,记录下来。 Django模型使用 QuerySet API 来访问Model类的对象。
比如说,我们已经定义了模型class Abc
,并且其他django应用程序使用 QuerySet API 调用它。
例如 -
Abc.objects.filter()
Abc.objects.get()
,等等。
我希望在通过 QuerySetAPI 调用特定模型class Abc
时添加回溯。
追溯是一种正确的方法吗?我应该用别的吗?
我在Mac上使用Python 2.7,Vegrant,Django 1.4.20。
答案 0 :(得分:2)
如果我理解你,这是我的解决方案。对queryset api的任何调用都会打印调用者堆栈。
import inspect
from django.db import models
from django.db.models import Manager
class LogManager(Manager):
def get_queryset(self):
print inspect.stack() # in py3.4 the [2] element was the actual caller outside Manager so I used [2:]
return super(LogManager, self).get_queryset()
class Abc(models.Model):
objects = LogManager()
UPD。:适用于所有django版本< 1.5你应该覆盖get_query_set
:
class LogManager(Manager):
def get_query_set(self):
print inspect.stack()
return super(LogManager, self).get_query_set()