2016-12-19 22 views
0

我正在試驗在Django中登錄。我想記錄每個用戶保存或修改數據的場合。在我的信號處理程序代碼,我有這樣的事情:獲取用於記錄信號的Django用戶名

@receiver(post_save) 
def post_save_callback(sender, instance, created, raw, using, update_fields, **kwargs): 
logger.info(
    'Post-save called for %s. Created? %r. update_fields: %s', 
    sender, created, json.dumps(update_fields) 
) 

我也想記錄進行數據操作的用戶的用戶名,基本上,在當前登錄的用戶。我怎樣才能得到這個用戶名?

回答

1

如文檔here中所述,當許多代碼可能對相同事件感興趣時,信號很有用。

是這種情況嗎?

如果數據操作在管理面板進行,你可以考慮覆蓋ModelAdmin對象log_change方法,你可以使用request.user.username獲得的當前登錄用戶的用戶名。

def log_change(self, request, object, message): 
    logger.info('User %s changed user data %s. %s' % 
       (request.user.username, object, message) 
    super(MyClass, self).log_change(request, object, message) 

記住的ModelAdmin已經登錄管理日誌的變化,文檔here

+0

我感興趣的記錄所有對數據的更改,無論是通過管理面板或通過網絡表單或REST。所以我認爲使用信號是要走的路,對吧? – texnic

1

不能完成。當前用戶只能通過使用post_save時不可用的請求來使用。 要實現你在找什麼,你可以做下列操作之一:

  1. 可以覆蓋對模型的save()方法
  2. 您可以使用中間件來存儲當前用戶(見本snippet至極可以添加用戶CREATED_BY和modified_by外鍵裁判自動任何模型)