Отслеживание доступа к полям модели Django

Учитывая следующую модель:

class A(BaseModel):
    b_fk = ForeignKey('B', ...)

    @property
    def get_dollars(self):
        return self.b_fk.dollars

Я хочу регистрировать каждый раз, когда поле из таблицы B обращается к внешнему ключу. Таким образом, A().get_dollars() должен регистрироваться факт обращения к полю dollars с использованием внешнего ключа.

Для этого я решил использовать __getattr__ и обернуть класс ForeignKey:

class ForeignKeyWithTracking(object):
    def __init__(self, ...):
        self.b_fk = ForeignKey('B', ...)

    def __getattr__(self, attr):
        # This method is called each time a field from this object is accessed. 
        logger.info('Field accessed: %s', attr)
        return getattr(self.b_fk, attr)

class A(BaseModel):
    b_fk = ForeignKeyWithTracking('B', ...)

Проблема в том, что все, что я вижу, это журналы, подобные следующим:

Field accessed: contribute_to_class
Field accessed: contribute_to_class
Field accessed: contribute_to_class

Так что я не понимаю, какое именно поле dollars. Вы знаете, почему это поле регистрируется, а не dollars?

Вернуться на верх