Python Django 模型信号 Post_Save 查询对象不包含保存的对象

斯蒂芬-诺格

我的目的是在属性字段更新后发送通知。我还需要在发送的通知中包含更新的属性的详细信息。

信号被触发并发送通知,但我无法从主机实例获取正在更新的属性。

相反,我最终得到了上次触发信号时保存的内容。

有谁知道如何在触发信号时更新属性实例?

请帮忙。

property = host.properties.last() #这拒绝查询主机。刚刚更新的属性实例。相反,它选择上次触发信号时更新的那个。

我的查询是问题还是 post_save 在属性字段更新之前被触发?

from django.contrib.gis.db import models
from phonenumber_field.modelfields import PhoneNumberField
from django_model_changes import ChangesMixin
from django.conf import settings
from django.dispatch import receiver
from django.db.models.signals import post_save
from ..services.notification import NotificationService



class Host(ChangesMixin, models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='host', unique=True)
    properties = models.ManyToManyField('Property', related_name='hosts', blank=True)
    one_field = models.DateTimeField(null=True, blank=True)
    another_field = models.OneToOneField('Location')


    def to_dict(self):

        if self.phone == None:
            number = None
        else:
            number = self.phone.national_number 

    return {
        'one_field': self.one_field,
        'another_field': self.properties.count() - self.limit,
    }

    def __unicode__(self):
        return 'Host {} {} {} <{}>'.format(self.user.first_name, self.user.last_name, self.phone, self.user.email)

    class Meta:
        db_table = 'host'
        verbose_name = 'Host'
        verbose_name_plural = 'Hosts'

@receiver(post_save, sender=Host)
def send_email_if_change_detected_in_properties(sender, instance, **kwargs):
if instance.properties:
    host = instance
    property = host.properties.last() # This refuses to take the host.property instance that has just been updated. Instead it picks the one that was updated last previously.
    NotificationService.send_new_property_assigned_to_host(host)
    print "Done"
尤金·普里卡奇科夫

它不起作用,因为它propertiesManyToMany字段。Djangopost_save在更新 m2m 字段之前触发M2m 字段在此之后更新,然后另一个信号 -m2m_changed被触发。因此,要跟踪 中的更改properties,您需要使用此信号https://docs.djangoproject.com/en/dev/ref/signals/#m2m-changed

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django信号post_save()

来自分类Dev

使用post_save信号在Django模型上模拟方法

来自分类Dev

具有post_save信号的django_mptt模型

来自分类Dev

具有post_save信号的django_mptt模型

来自分类Dev

Django信号post_save更新

来自分类Dev

传递参数Django信号-post_save / pre_save

来自分类Dev

如何在post_save信号上以Django模型获取当前登录的用户?

来自分类Dev

多对多关系查询在post_save信号上返回空的查询集,但在Django shell中不返回

来自分类Dev

Django从post_save信号访问ManyToMany字段

来自分类Dev

识别Django post_save信号中已更改的字段

来自分类Dev

Django从post_save信号访问ManyToMany字段

来自分类Dev

Django:断开 post_save 信号以避免递归

来自分类Dev

在post_save信号上获取完整的User对象

来自分类Dev

使用 OneToOneField 扩展 Django 的用户模型:当并非每个用户都是 CustomUser 时,适当的 post_save 信号

来自分类Dev

Django:将变量从pre_save传递到post_save信号

来自分类Dev

Django更改使用内联时调用pre_save post_save信号的顺序?

来自分类Dev

将 pre_save 信号更改为 post_save?Django

来自分类Dev

如何将Django post_save信号作为后台进程运行?

来自分类Dev

由post_save信号执行的Django代码在原子事务内发生

来自分类Dev

Django管理命令并将自定义参数发送到post_save信号

来自分类Dev

由post_save信号执行的Django代码在原子事务内发生

来自分类Dev

Django管理命令并将自定义参数发送到post_save信号

来自分类Dev

是否可以接收来自特定模型表单的 save() 的 post_save 信号,而不是简单地在保存实例的任何时候?

来自分类Dev

何时在Django中使用pre_save,保存,post_save?

来自分类Dev

如何在Django post_save侦听器中获取请求对象

来自分类Dev

创建一个post_save信号,该信号为我创建一个配置文件对象

来自分类Dev

在将实例保存到数据库之前/之后是否触发了Django post_save?

来自分类Dev

在post_save django上发送邮件

来自分类Dev

Viewset / Serializer上的DRF PUT不会在模型实例上触发post_save信号

Related 相关文章

  1. 1

    Django信号post_save()

  2. 2

    使用post_save信号在Django模型上模拟方法

  3. 3

    具有post_save信号的django_mptt模型

  4. 4

    具有post_save信号的django_mptt模型

  5. 5

    Django信号post_save更新

  6. 6

    传递参数Django信号-post_save / pre_save

  7. 7

    如何在post_save信号上以Django模型获取当前登录的用户?

  8. 8

    多对多关系查询在post_save信号上返回空的查询集,但在Django shell中不返回

  9. 9

    Django从post_save信号访问ManyToMany字段

  10. 10

    识别Django post_save信号中已更改的字段

  11. 11

    Django从post_save信号访问ManyToMany字段

  12. 12

    Django:断开 post_save 信号以避免递归

  13. 13

    在post_save信号上获取完整的User对象

  14. 14

    使用 OneToOneField 扩展 Django 的用户模型:当并非每个用户都是 CustomUser 时,适当的 post_save 信号

  15. 15

    Django:将变量从pre_save传递到post_save信号

  16. 16

    Django更改使用内联时调用pre_save post_save信号的顺序?

  17. 17

    将 pre_save 信号更改为 post_save?Django

  18. 18

    如何将Django post_save信号作为后台进程运行?

  19. 19

    由post_save信号执行的Django代码在原子事务内发生

  20. 20

    Django管理命令并将自定义参数发送到post_save信号

  21. 21

    由post_save信号执行的Django代码在原子事务内发生

  22. 22

    Django管理命令并将自定义参数发送到post_save信号

  23. 23

    是否可以接收来自特定模型表单的 save() 的 post_save 信号,而不是简单地在保存实例的任何时候?

  24. 24

    何时在Django中使用pre_save,保存,post_save?

  25. 25

    如何在Django post_save侦听器中获取请求对象

  26. 26

    创建一个post_save信号,该信号为我创建一个配置文件对象

  27. 27

    在将实例保存到数据库之前/之后是否触发了Django post_save?

  28. 28

    在post_save django上发送邮件

  29. 29

    Viewset / Serializer上的DRF PUT不会在模型实例上触发post_save信号

热门标签

归档