2011-05-21 61 views
0

如何获取信号中的远程ip和字段名称?在信号中获取远程ip和模型字段名称

我试过使用def ModelChangeLogger(sender, request, **Kwargs):,但它抛出的错误信息只有一个参数。代码:

signals.py

def ModelChangeLogger(sender, **Kwargs): 
     if str(sender._meta) == str(models.DBLogEntry._meta): 
     return 

     log_time = datetime.datetime.now() 
     log_table_name = sender._meta.object_name 
     log_instance = Kwargs['instance'] 
     log_ip = '0.0.0.0' **####### Remote ip #########** 
     log_change_type = '' 
     if 'created' in Kwargs: 
     log_change_type = Kwargs['created'] and 'Creation' or 'Updating' 
     else: 
     log_change_type = 'Deleting' 

     models.DBLogEntry.objects.create(
      log_time=log_time, 
      log_table_name=log_table_name, 
      log_instance=log_instance, 
      log_change_type=log_change_type 
    ) 

__init__.py

from django.db.models.signals import post_save 
from django.db.models.signals import pre_save 
from django.db.models.signals import post_delete 

from myapp.tracker.signals import ModelChangeLogger 

pre_save.connect(ModelChangeLogger) 
post_save.connect(ModelChangeLogger) 
post_delete.connect(ModelChangeLogger) 

如何从那里得到remote_add和字段名称?

回答

1

不建议让信号处理程序期待request对象,因为可能会触发模型保存,而不会请求来自Web浏览器的请求(例如,如果您只是通过shell执行操作)或请在您的代码的其他地方拨打model.save()

您可以让自己的定制信号从修改模型的视图发送,或者在视图中自己调用记录方法。