You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django使用fcm-django本地正常生产报send_message缺少参数错误

核心原因

本地与生产环境安装的fcm-django依赖版本不一致:

  • 你本地开发环境安装的是1.x.x旧版本,该版本的FCMDeviceQuerySet.send_message方法支持直接传入title、body、click_action等关键字参数发送通知
  • 生产环境安装的是2.0.0及以上新版本,该版本重构了接口设计,要求send_message方法第一个参数必须传入构造好的Message实例,不再支持直接传零散参数,因此会抛出缺少message参数的报错。
修复方案

有两种可选修复方式:

方案1:对齐依赖版本(最快修复)

将生产环境的fcm-django版本降级到和本地一致的旧版本即可直接兼容现有代码。
你可以在项目的requirements.txt中固定版本号,示例:

fcm-django==1.0.13

重新部署后生产环境安装对应版本即可恢复正常。

方案2:适配新版本接口(推荐长期维护)

如果需要使用新版本的功能特性,可以修改代码适配新的接口规范:
首先导入Message类,再构造消息实例传入send_message方法,修改后的代码如下:

from fcm_django.fcm import Message

class All_Device_Notification(models.Model):
    title = models.TextField(default="")
    description = models.TextField(default="")
    link = models.TextField(default="")

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        filtered_users = User.objects.all()
        devices = FCMDevice.objects.filter(user__in=filtered_users)
        # 构造符合新版本要求的Message实例
        message = Message(
            title=self.title,
            body=self.description,
            click_action=self.link
        )
        devices.send_message(message)
        super(All_Device_Notification, self).save(*args, **kwargs)
额外优化建议

建议将通知发送逻辑放到super().save()执行之后,避免出现通知发送成功但模型数据存储失败的不一致问题。

内容的提问来源于stack exchange,提问作者Kwall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:06:02