DRF、通道和模型观察者 - 即使模型发生变化,消息也不会通过 websocket 发送到客户端?

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

我的 DRF 应用程序中有这些定义:

通知模型:

from django.db import models


class Notifications(models.Model):
    id = models.BigAutoField(
        auto_created=True, primary_key=True, serialize=False, verbose_name='notification_id')
    user = models.ForeignKey(
        "accounts.User", on_delete=models.CASCADE, blank=False, verbose_name="notification_receiver")
    date = models.DateTimeField(verbose_name="notification_datetime", blank=False)
    message = models.TextField(blank=False, verbose_name="notification_message")

NotificationSerializer:

from rest_framework import serializers
from notifications.models import Notifications


class NotificationsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Notifications
        fields = ["date", "message"]


和消费者:

from djangochannelsrestframework.generics import GenericAsyncAPIConsumer
from djangochannelsrestframework.observer import model_observer
from notifications.models import Notifications
from notifications.serializers import NotificationsSerializer


class NotificationsConsumer(GenericAsyncAPIConsumer):
    serializer_class = NotificationsSerializer
    queryset = Notifications.objects.all()

    async def connect(self, **kwargs):
        await self.model_activity.subscribe()
        await super().connect()

    @model_observer(Notifications)
    async def model_activity(self, message, observer=None, action=None, **kwargs):
        # send activity to frontend
        await self.send_json(message)

    @model_activity.serializer
    def model_serialize(self, instance, action, **kwargs):
        return NotificationsSerializer(instance=instance).data

我在这里关注文档:https://djangochannelsrestframework.readthedocs.io/en/latest/observer/observer.html

我正在通过邮递员连接到这个 websocket(如果这有区别的话)——我只是在开发一个 API 而不是前端。

即使我的通知表获得新数据,也不会通过通道发送任何消息。可能缺少什么?任何见解将不胜感激,谢谢!

django-models django-rest-framework django-channels
© www.soinside.com 2019 - 2024. All rights reserved.