Jon*_*sen 48 django django-signals
我需要对Django中新创建的对象进行一些后台后处理.此后处理应仅在新对象上运行,而不是刚刚更新的对象.
我知道在pre_save中我可以检查对象是否有id,如果没有则那么它是一个新对象.但问题是在后处理中我需要访问id(这样我就可以将结果保存回数据库).
我怎么能以干净的方式做到这一点?
sel*_*ler 68
看一下docs:https://docs.djangoproject.com/en/stable/ref/signals/#post-save
如果它是一个新对象created,则会设置一个命名参数True.
ela*_*ver 16
正如Docs所说,@ seler指出,但举个例子:
def keep_track_save(sender, instance, created, **kwargs):
action = 'save' if created else 'update'
save_duplicate((instance.id, instance.__class__.__name__, action))
post_save.connect(keep_track_save, sender=Group)
Run Code Online (Sandbox Code Playgroud)
我只是把它留在这里,也许它会对某人有所帮助。
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
class Deal(models.Model):
name = models.CharField(max_length=255)
@receiver(post_save, sender=Deal)
def print_only_after_deal_created(sender, instance, created, **kwargs):
if created:
print(f'New deal with pk: {instance.pk} was created.')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20148 次 |
| 最近记录: |