在 Django 中获取模型 类 的调用堆栈

get call stack for Model Classes in Django

在 Django 中,我想在模型中获取 classes 的调用堆栈;随叫随到,并记录下来。 Django 模型使用 QuerySet API 来访问模型 class 的对象。

说,我们已经定义了模型 class Abc,其他 django 应用程序使用 QuerySet API.

调用它

例如-

Abc.objects.filter()

Abc.objects.get()

每当通过 QuerySetAPI 调用特定模型 class Abc 时,我想添加回溯。

追溯是正确的方法吗?我应该用别的东西吗?

我在 Mac.Python 上使用 Python 2.7、Vegrant、Django 1.4.20

如果我没理解错的话,这就是我的解决方案。对 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()

更新:对于所有小于 1.5 的 django 版本,你应该覆盖 get_query_set:

class LogManager(Manager):
    def get_query_set(self):
        print inspect.stack()
        return super(LogManager, self).get_query_set()