Отслеживание доступа к полям модели 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
?