django post_save post_delete

Django Signals

场景

需求:在Model调用save/delete方法进行保存的最后时刻,要做一些定制的行为

import

from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver

custom function

@receiver(post_save, sender=Comment)
def comment_after(sender, created, instance, **kwargs):
# sender表示是要保存的Model, created表示是否是新创建,instance表示当前保存的实例对象的引用


# 在Model对象实例在删除的时刻要做的定制操作
@receiver(post_delete, sender=Comment)
def delete_comment_after(sender, instance, **kwargs):

官方文档

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django中,可以通过信号(Signal)机制在一个模型(Model)的实例保存(save)之后执行一些操作。在这种情况下,如果你想要获取当前用户信息并将其保存到模型中,可以通过信号机制中的`request`属性来获取。 例如,假设你有一个名为`MyModel`的模型,你想在保存实例时记录当前用户的信息。你可以使用`post_save`信号来实现这个功能。 ```python from django.db import models from django.contrib.auth.models import User from django.db.models.signals import post_save from django.dispatch import receiver class MyModel(models.Model): name = models.CharField(max_length=50) user = models.ForeignKey(User, on_delete=models.CASCADE, null=True) def __str__(self): return self.name @receiver(post_save, sender=MyModel) def save_user(sender, instance, created, **kwargs): request = kwargs.get('request') if request: instance.user = request.user instance.save() ``` 在这个示例中,`save_user`函数是一个接收`post_save`信号的接收器。当一个`MyModel`实例被保存时,这个函数将被调用。这个函数首先通过`kwargs`字典获取`request`对象,然后从`request`对象中获取当前用户信息(`request.user`),并将其保存到模型中。 要使用`request`对象,你需要将其作为参数传递给保存实例的视图函数。例如: ```python from django.shortcuts import render from .models import MyModel def my_view(request): if request.method == 'POST': name = request.POST.get('name') my_model = MyModel(name=name) my_model.save(request=request) my_models = MyModel.objects.all() return render(request, 'my_template.html', {'my_models': my_models}) ``` 在这个示例中,当用户提交表单时,`my_view`函数将创建一个`MyModel`实例,并将`request`对象传递给`save`方法。这将使`save_user`函数能够访问当前用户信息并将其保存到模型中。 这就是如何在Django中使用`post_save`信号来获取当前用户信息并将其保存到模型中的示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值