我使用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
有什么主意吗?
答案 0 :(得分:0)
您不能将其发送到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
。但是,如果这是发送邮件的任务,我认为您只能发送所需的电子邮件列表作为参数,以在那里发送电子邮件。