python - 'TYPE' 类型的对象不是 JSON 可序列化的 Django
问题描述
我使用 ReactJS 和 Graphql 作为前端,使用 django 和石墨烯作为后端。
在 django 我有如下代码:
company = Company.objects.get(pk=input.company.id)
###### Result is <Company: Company object (14)>
UserByManagerCreated.delay(company=company)
在UserByManagerCreated
我有:
@task
def UserByManagerCreated(company):
#Send emails, ....
pass
但我收到一个错误Object of type 'Company' is not JSON serializable
任何想法?
解决方案
您不能将它发送到 celery 任务,因为它应该是可序列化的,因为延迟的任务存储在队列(Redis
或Rabbit
)中并且它应该是可序列化的。因此,您可以将所有可序列化类型作为参数传递给 celery 任务。
我的建议是传递您需要在任务中使用的那些值。不是它company
本身,而是你需要的值。或者您可以将它们放入字典并通过它。
company = Company.objects.get(pk=input.company.id)
company_data = {'id': company.id, 'your_field': company.your_field}
UserByManagerCreated.delay(company=company_data)
正如 AKX 建议的那样,您只能传递 id 并company
在任务中检索您的权利。但是,如果这是一个发送邮件任务,我认为您可以只发送需要的电子邮件列表作为参数,以便在那里发送电子邮件。
推荐阅读
- json - useEffect "在函数 "onEachCountry" 中调用,该函数既不是 React 函数组件也不是自定义 React Hook 函数
- node.js - CORS 策略:Ionic 中请求的资源上不存在“Access-Control-Allow-Origin”标头
- python - 在 tinyDB 中搜索复杂的 json 信息
- redux - 鉴于 Immutable.js 的当前使用情况,如何部分迁移以响应工具包?
- git - 为什么带有参数的 git 别名的行为与实际命令不同?
- javascript - Typescript 通过地图错误渲染:堆栈深度比较类型过多
- docker - 无法从 jenkins 登录 GitHub 容器注册表
- ruby - `bundle exec jekyll serve` 依赖意外中断
- questdb - QuestDb中时间戳的含义是什么?
- angular - 如何解决“ReferenceError: primordials is not defined”问题?