我已经在我的项目中完成了下面的post_save信号。
from django.db.models.signals import post_save
from django.contrib.auth.models import User
# CORE - SIGNALS
# Core Signals will operate based on post
def after_save_handler_attr_audit_obj(sender, **kwargs):
print User.get_profile()
if hasattr(kwargs['instance'], 'audit_obj'):
if kwargs['created']:
kwargs['instance'].audit_obj.create(operation="INSERT", operation_by=**USER.ID**).save()
else:
kwargs['instance'].audit_obj.create(operation="UPDATE").save()
# Connect the handler with the post save signal - Django 1.2
post_save.connect(after_save_handler_attr_audit_obj, dispatch_uid="core.models.audit.new")
按列操作,我要获取用户id并将其存储。知道怎么做吗?
我可以通过检查堆栈并查找视图,然后查看视图的局部变量来获取请求。感觉有点像黑客,但很管用。
做不到。当前用户仅通过请求可用,而在使用纯模型功能时不可用。以某种方式访问视图中的用户。
伊格纳西奥是对的。Django的模型信号旨在通知其他系统组件与实例相关的事件及其相关数据,因此我猜您不能从模型
post_save
信号访问请求数据是有效的,除非该请求数据存储在实例上或与实例相关。我想有很多方法可以处理它,从坏到好,但我想这是一个prime示例,用于创建基于类/基于函数的通用视图,它将自动为您处理这个问题。
让您的视图继承自
CreateView
、UpdateView
或DeleteView
如果它们处理在需要审核的模型上操作的谓词,则另外继承自AuditMixin
类。然后AuditMixin
可以挂接到成功创建\update\delete对象并在数据库中创建条目的视图中。非常有意义,非常干净,容易插拔,并产生快乐的小马。反面?您要么必须在即将发布的Django 1.3版本上,要么必须花一些时间修改基于函数的通用视图,并为每个审核操作提供新视图。
相关问题 更多 >
编程相关推荐