Django信号-如何使用post_save发送保存在模型中的内容?

问题描述 投票:0回答:1

[尝试使用信号通过websocket发送使用.save()保存的最后一条记录。我要在data中输入什么?

#models.py
from django.db import models
from django.db.models.signals import post_save
from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync

class DataModel(models.Model):
    time = models.DateTimeField()
    value = models.FloatField()

    def __str__(self):
        return str(self.time)

def save_post(sender, instance, **kwargs):
    channel_layer = get_channel_layer()
    async_to_sync(channel_layer.group_send)(
        "echo_group",
        {"type": "on.message", "data": data},
    )

post_save.connect(save_post, sender=DataModel)

我想我可以获取具有最高索引的记录并将其发送,但是想知道是否有更优雅的解决方案。

python django django-models django-channels django-signals
1个回答
0
投票

我认为instance.__dict__是您想要的。它将所有模型属性转换为字典键值对]

所以您可以做类似的事情

def save_post(sender, instance, **kwargs):
    channel_layer = get_channel_layer()
    async_to_sync(channel_layer.group_send)(
        "echo_group",
        {"type": "on.message", "data": instance.__dict__},
    )
© www.soinside.com 2019 - 2024. All rights reserved.