python - kombu.exceptions.EncodeError : User is not JSON serializable 错误

标签 python json django celery celery-task

我有 django 1.11.5 应用程序和 celery 4.1.0,我一直收到:

kombu.exceptions.EncodeError: <User: testuser> is not JSON serializable

我的设置.py:

CELERY_BROKER_URL = 'amqp://localhost'
CELERY_RESULT_BACKEND = 'amqp://localhost'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Makassar'
CELERY_BEAT_SCHEDULE = {}

任务.py

from __future__ import absolute_import, unicode_literals
from celery import task
from django.contrib.auth.models import User


@task(serializer='json')
def task_number_one():
    user = User.objects.create(username="testuser", email="test@test.com", password="pass")
    return user

我在 View 中调用任务:

def form_valid(self, form):
    form.instance.user = self.request.user
    task_number_one.delay()
    return super().form_valid(form)

最佳答案

这是因为您正在使用 JSON 序列化程序进行任务序列化(如设置 CELERY_TASK_SERIALIZER = 'json' 所示),但您正试图返回一个模型实例(无法序列化为JSON)。

你有两个选择:

1)不传递实例,传递实例的主键,然后在任务中查找对象。

2) 改用pickle 任务序列化器。这将允许您将对象作为参数传递给您的任务并返回它们,但它有自己的 security concerns。 .

关于python - kombu.exceptions.EncodeError : User is not JSON serializable 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49373825/

相关文章:

python - 如何获取PyQt5中QlistWidget中存在的所有项目

python - 运行 python 脚本并输出到 txt 以获取 URL 列表

java - 有什么方法可以有效地检查提供的 jsonObject 中是否缺少任何 key ?

python - 添加/更改表单中的 ForeignKey 字段 - Django admin

python - 如何在 Django 中导入另一个类模型中的值?

python - 类型 'ListedColormap' 的对象没有 len()

python - 单击和 pylint

javascript - 无法设置未定义 Angular js 的属性

javascript - 从数组中对象的数组中获取字符串值

django - 如何获取查询集条件和/或将查询集条件保存到数据库?