我正在使用
django_celery_results
来保存一些 celery 任务的结果。每个任务都获取 kwargs
作为输入,最后保存在 task_kwargs
的 TaskResult
字段中。
我稍后无法从它们保存在数据库中的方式加载这些
kwargs
。例如,这是一个条目:
"{'config_file_path': '/path/to/configs/some_config.json'}"
访问字段值的简单示例:
tkwargs = TaskResult.objects.get(id=1).task_kwargs
为此我得到了上面的字符串。
将
task_kwargs
作为 python 字典而不是该字符串获取的直接方法是什么?
这就是我所拥有的:
args = json.loads(task.task_kwargs)
if isinstance(args, str):
args = args.replace("'", '"')
args = json.loads(args)
不漂亮,但有效。
希望这个包能更容易实现(为什么它们不从模型中反序列化?):
recent_tasks = TaskResult.objects.order_by('-date_done')[:10]
tasks_list = [
{
'task_id': task.task_id,
'task_name': task.task_name,
'task_args': json.loads((task.task_args or "null").replace("()", "null").replace('"null"', 'null')),
'task_kwargs': json.loads((json.loads(task.task_kwargs or 'null') or "null").replace("'", '"')),
'status': task.status,
'result': json.loads(task.result),
'date_created': task.date_created,
'date_done': task.date_done,
'meta': json.loads(task.meta),
'worker': task.worker,
'traceback': task.traceback,
}
for task in recent_tasks
]