我使用django_celery_results
来保存一些芹菜任务的结果。每个任务获得kwargs
作为输入,最后保存在TaskResult
的task_kwargs
字段中。
我有麻烦加载这些kwargs
以后从他们得到保存在DB的方式。例如,这是一个条目:
"{'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
]