django - 在 django 中为 post_save 编写的自定义函数中捕获覆盖保存函数的返回值
问题描述
我正在使用信号(post_save
)的 django 应用程序中实现通知系统。
我正在记录save
模型的覆盖方法的变化并返回它。我的问题是我如何才能在为post_save
.
相关代码片段:
myapp/models.py:
class MyModel(models.Model):
# fields
#
#
def save(self, *args, **kw): #overridden save method
old = type(self).objects.get(pk=self.pk) if self.pk else None
super(MyModel, self).save(*args, **kw)
if old and old.attr != self.attr: # Field has changed
return something
#
#
我的应用程序/views.py:
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
from webpush import send_user_notification
@receiver(post_save, sender=MyModel)
def notifier(sender, instance, created, **kwargs):
# how to catch the return values of save here ##
payload = {"head": "Welcome!", "body": "Hello World"}
send_user_notification(user=User.objects.all()[0], payload=payload, ttl=1000)
#here User.objects.all()[0] for test user
post_save.connect(receiver=notifier,sender=MyModel)
解决方案
您必须像这样在模型实例中保存“某些东西”:
在myapp/models.py 中:
class MyModel(models.Model):
# fields
#
#
def save(self, *args, **kw): #overridden save method
old = type(self).objects.get(pk=self.pk) if self.pk else None
super(MyModel, self).save(*args, **kw)
if old and old.attr != self.attr: # Field has changed
self._something = something
然后在您的myapp/views.py中更改接收器方法,如下所示:
@receiver(post_save, sender=MyModel)
def notifier(sender, instance, created, **kwargs):
# how to catch the return values of save here ##
something = instance._something #your something
payload = {"head": "Welcome!", "body": "Hello World"}
send_user_notification(user=User.objects.all()[0], payload=payload, ttl=1000)
#here User.objects.all()[0] for test user
推荐阅读
- firebase - Firebase 中“session_start”的“session_engaged”事件属性是什么?
- ruby-on-rails - 将 Postgresql 添加到现有 Rails 项目
- java - 如何从不同的活动中获取 RadioGroup 值
- django - 为什么在 Django 模型图像中,Media.url 返回一个空字符串,而不是图像链接?
- python-3.x - “Flask Sqlite 数据库未显示查询”
- ios - 升级到 Xcode 版本 10.2 (10E125) 后,使用 range.upperBound.samePosition(in: utf16) 时出现致命错误
- android - Resource.Raw 不包含 Json 文件的定义
- apache-spark - 如何根据动态列比较pyspark中的2个数据框
- javascript - 在客户端机器中加载文件/文件夹
- .net - 无法从 C++/CLI 项目添加对 C# DLL 的引用