我正在尝试为字段auth_user.is_active
变为1时创建自定义信号。我查看了Django关于信号的文档,但却无法理解如何实现自定义信号。
当用户帐户变为活动状态时,我想执行以下功能:
def new_user(sender, **kwargs)
profile = User.objects.get(id=user_id).get_profile()
return RecentActivity(content_object=profile, event_type=1, timestamp=datetime.datetime.now())
我该怎么做?而且,使用信号直接进行数据库插入的优势是什么?谢谢。
答案 0 :(得分:1)
如果您想在字段更改时执行某些操作,可以使用here中的方法(Josh回答)。
信号通常用于在应用之间进行通信。例如,auth app发送user_logged_in
信号。因此,如果您想在用户登录时执行某些操作,则只需处理此信号,无需修补应用程序。
答案 1 :(得分:1)
这是我做的:
# in models.py
@receiver(pre_save, sender=User, dispatch_uid='get_active_user_once')
def new_user_activation_handler(sender, instance, **kwargs):
if instance.is_active and User.objects.filter(pk=instance.pk, is_active=False).exists():
profile = User.objects.get(pk=instance.pk).get_profile()
RecentActivity.objects.create(content_object=profile, event_type=1, timestamp=datetime.datetime.now())