类型“ TYPE”的对象不是JSON可序列化的Django

时间:2019-05-24 08:32:06

标签: python django

我使用ReactJS和Graphql作为前端,使用django和graphene作为后端。

在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

有什么主意吗?

1 个答案:

答案 0 :(得分:0)

您不能将其发送到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。但是,如果这是发送邮件的任务,我认为您只能发送所需的电子邮件列表作为参数,以在那里发送电子邮件。