如何在使用 django admin 将记录插入数据库后添加功能?

Posted

技术标签:

【中文标题】如何在使用 django admin 将记录插入数据库后添加功能?【英文标题】:How to add a function after a record inserted in database using django admin? 【发布时间】:2019-07-18 18:11:56 【问题描述】:

我想在使用 django-admin panel 将记录插入数据库后执行一个函数。

我有一个产品表,我想在 django 管理面板将记录插入数据库时​​向用户发送通知。我知道如何向用户发送通知,但我不知道将我的代码放在哪里。

任何建议都会有所帮助。

插入记录后如何执行通知用户的功能?

这是插入记录后要执行的代码:

from fcm_django.models import FCMDevice

device = FCMDevice.objects.all()

device.send_message(title="Title", body="Message", icon=..., data="test": "test")

我搜索了很多,但没有找到任何有用的东西。

感谢这个伟大的社区。​​p>

【问题讨论】:

docs.djangoproject.com/en/2.1/topics/signals 我认为这个 SO 答案可以帮助你:***.com/a/43146907/8583681 @Y.Bernard 这是我想要的答案,但问题是把答案代码放在哪里?我的意思是在 admin.py 或 models.py 中,...... @T.Pool models.py 【参考方案1】:

您需要使用 Django 模型 post_save 信号来实现这一点。这个信号接收器可以放在模型所在的地方

class FCMDevice(models.Model):
    ...

@receiver(post_save, sender=FCMDevice)
def notify_users(sender, instance, **kwargs):
     # your logic goes here
     # instance is referred to currently inserted row
     pass

【讨论】:

【参考方案2】:

您可以在您的产品模型上修改保存方法

def save(self, *args, **kwargs):
    super().save(*args, **kwargs)
    device = FCMDevice.objects.all()
    device.send_message(title="Title", body="Message", icon=..., data="test": "test")

好吧,每次保存实例时它都会发送通知(不仅是在 django 管理面板中添加时)。

【讨论】:

【参考方案3】:

您可能想检查post_save 信号。来自文档:

类似于 pre_save,但在 save() 方法结束时发送。

网址:https://docs.djangoproject.com/en/2.1/ref/signals/#post-save

django 版本:1.7+

【讨论】:

以上是关于如何在使用 django admin 将记录插入数据库后添加功能?的主要内容,如果未能解决你的问题,请参考以下文章

Django-admin:如何在记录更改列表中显示指向对象信息页面的链接而不是编辑表单?

如何在django-admin中隐藏特定记录的字段?

使用 DEBUG=False,我如何将 django 异常记录到日志文件中

如何在 django admin 中获取对象的历史记录?

绑定 Django Admin 的模型历史

将多条记录添加到django admin中