Вот моя проблема.Я пытаюсь добавить инструментарий в мой код, основанный на Django.Вот что я делаю:
def trace(func):
def wrapped(*args, **kwargs):
print func.__name__
return func(*args, **kwargs)
return wrapped
def trace_class_func(kclass, func):
setattr(kclass, func.__name__, classmethod(trace(func.im_func)))
# Trace all the calls to 'get_query_set' from all the classes or subclasses of Manager
tracer.trace_class_func(models.Manager, models.Manager.get_query_set)
Этот класс хранится внутри модуля "tracer", и я добавляю "tracer" в раздел INSTALLED_APPS файла settings.py (обратите внимание, что добавлен модуль 'tracer')в конце).
Однако, когда я запускаю свое приложение, я получаю эту ошибку:
Тип исключения: AttributeError в / settings / интеграций / Значение исключения: тип объекта "UserManager" не имеетатрибут 'model'
Это происходит внутри django / db / models / manager.py в функции get_query_set.
EDIT: дело в том, что когда я пытался напечатать содержимое класса UserManager (которыйявляется производным от models.Manager), распознавались только поля, определенные в UserManager, и ни одно из полей базового класса:
self: <class 'django.contrib.auth.models.UserManager'>
keys: {'__module__': 'django.contrib.auth.models', 'create_superuser': <function create_superuser at 0x10d44eaa0>, 'create_user': <function create_user at 0x10d44ea28>, 'make_random_password': <function make_random_password at 0x10d44eb18>, '__doc__': None, '__init__': <function __init__ at 0x10d44e9b0>}
Как видно, даже функции, определенные UserManager, являются толькобудучи напечатанным, а не определенным моделями. Менеджер.Не уверен, почему это происходит.
Кто-нибудь знает, что здесь происходит?Потому что, когда я запускаю этот трассировщик на своих пользовательских классах (включая базовые и унаследованные классы), он отлично работает, поэтому я предполагаю, что это ошибка Django, либо в моей конфигурации, либо что-то еще.