首页 > 解决方案 > '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

任何想法?

标签: pythondjango

解决方案


您不能将它发送到 celery 任务,因为它应该是可序列化的,因为延迟的任务存储在队列(RedisRabbit)中并且它应该是可序列化的。因此,您可以将所有可序列化类型作为参数传递给 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在任务中检索您的权利。但是,如果这是一个发送邮件任务,我认为您可以只发送需要的电子邮件列表作为参数,以便在那里发送电子邮件。


推荐阅读