【发布时间】:2018-08-17 09:32:31
【问题描述】:
在我的项目中,我使用django-celery-results framework 来访问 celery 任务结果。该框架将任务结果存储为 JSON 格式。结果之一如下图;
"{\"runs\": [{\"run_number\": 1, \"run_date\": \"2018-08-17 10:13:53.488079\", \"cycle_number\": 0, \"global_best\": {\"number_of_fitness_cases\": null, \"functions\": [{\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": \"<ufunc 'multiply'>\", \"name\": \"mul\", \"arity\": 2}, {\"function\": {}, \"name\": \"div\", \"arity\": 2}], \"n_features\": 1, \"constants\": [{\"value\": 0.1}, {\"value\": 0.2}, {\"value\": 0.3}, {\"value\": 0.4}, {\"value\": 0.5}, {\"value\": 0.6}, {\"value\": 0.7}, {\"value\": 0.8}, {\"value\": 0.9}, {\"value\": -0.1}, {\"value\": -0.2}, {\"value\": -0.3}, {\"value\": -0.4}, {\"value\": -0.5}, {\"value\": -0.6}, {\"value\": -0.7}, {\"value\": -0.8}, {\"value\": -0.9}], \"terminals\": [{\"value\": 0.1}, {\"value\": 0.2}, {\"value\": 0.3}, {\"value\": 0.4}, {\"value\": 0.5}, {\"value\": 0.6}, {\"value\": 0.7}, {\"value\": 0.8}, {\"value\": 0.9}, {\"value\": -0.1}, {\"value\": -0.2}, {\"value\": -0.3}, {\"value\": -0.4}, {\"value\": -0.5}, {\"value\": -0.6}, {\"value\": -0.7}, {\"value\": -0.8}, {\"value\": -0.9}, 0], \"full_set\": [{\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": \"<ufunc 'multiply'>\", \"name\": \"mul\", \"arity\": 2}, {\"function\": {}, \"name\": \"div\", \"arity\": 2}, {\"value\": 0.1}, {\"value\": 0.2}, {\"value\": 0.3}, {\"value\": 0.4}, {\"value\": 0.5}, {\"value\": 0.6}, {\"value\": 0.7}, {\"value\": 0.8}, {\"value\": 0.9}, {\"value\": -0.1}, {\"value\": -0.2}, {\"value\": -0.3}, {\"value\": -0.4}, {\"value\": -0.5}, {\"value\": -0.6}, {\"value\": -0.7}, {\"value\": -0.8}, {\"value\": -0.9}, 0], \"random_state\": \"<mtrand.RandomState object at 0x7efc35c67240>\", \"max_depth\": 5, \"method\": \"full\", \"program\": [{\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, {\"function\": {}, \"name\": \"div\", \"arity\": 2}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": {}, \"name\": \"div\", \"arity\": 2}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, 0, {\"value\": 0.3}, {\"function\": \"<ufunc 'multiply'>\", \"name\": \"mul\", \"arity\": 2}, {\"value\": -0.4}, {\"value\": -0.3}, {\"function\": \"<ufunc 'multiply'>\", \"name\": \"mul\", \"arity\": 2}, {\"value\": -0.3}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, 0, {\"function\": \"<ufunc 'multiply'>\", \"name\": \"mul\", \"arity\": 2}, {\"value\": -0.4}, {\"value\": -0.3}, {\"function\": \"<ufunc 'multiply'>\", \"name\": \"mul\", \"arity\": 2}, {\"value\": -0.4}, {\"value\": -0.3}, {\"function\": \"<ufunc 'multiply'>\", \"name\": \"mul\", \"arity\": 2}, {\"value\": -0.3}, 0, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, {\"value\": -0.2}, {\"value\": -0.6}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, 0, {\"value\": 0.3}, {\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, {\"value\": -0.7}, {\"function\": \"<ufunc 'multiply'>\", \"name\": \"mul\", \"arity\": 2}, {\"value\": -0.4}, 0, {\"function\": {}, \"name\": \"div\", \"arity\": 2}, {\"value\": -0.7}, {\"value\": -0.2}, {\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, {\"value\": -0.1}, {\"function\": {}, \"name\": \"div\", \"arity\": 2}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, {\"value\": 0.9}, {\"value\": 0.8}, {\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, 0, {\"value\": 0.3}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": {}, \"name\": \"div\", \"arity\": 2}, {\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, {\"value\": 0.9}, {\"value\": 0.8}, {\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, 0, {\"value\": 0.3}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, {\"function\": \"<ufunc 'multiply'>\", \"name\": \"mul\", \"arity\": 2}, 0, {\"value\": -0.1}, {\"value\": 0.9}, {\"function\": {}, \"name\": \"div\", \"arity\": 2}, {\"function\": {}, \"name\": \"div\", \"arity\": 2}, 0, {\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, {\"value\": 0.4}, {\"value\": 0.3}, {\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, {\"value\": 0.4}, {\"value\": 0.3}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": \"<ufunc 'multiply'>\", \"name\": \"mul\", \"arity\": 2}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, 0, {\"function\": \"<ufunc 'multiply'>\", \"name\": \"mul\", \"arity\": 2}, {\"value\": -0.3}, 0, {\"value\": -0.3}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, 0, {\"value\": 0.3}, {\"function\": \"<ufunc 'multiply'>\", \"name\": \"mul\", \"arity\": 2}, {\"value\": -0.4}, {\"value\": -0.1}, {\"function\": \"<ufunc 'multiply'>\", \"name\": \"mul\", \"arity\": 2}, {\"value\": -0.3}, 0, {\"function\": {}, \"name\": \"div\", \"arity\": 2}, {\"value\": -0.7}, {\"value\": -0.2}, {\"function\": \"<ufunc 'subtract'>\", \"name\": \"sub\", \"arity\": 2}, {\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, 0, {\"value\": 0.3}, {\"function\": \"<ufunc 'add'>\", \"name\": \"add\", \"arity\": 2}, {\"value\": -0.7}, {\"value\": 0.9}], \"raw_fitness_\": 0.0017450904199366553, \"hits\": 0, \"trial\": 2, \"probability\": 1.0, \"metric\": {\"function\": {}, \"title\": \"Mean Square Error\", \"greater_is_better\": false, \"sign\": -1}, \"depth_\": 10}}], \"average_cost\": 0.0017450904199366553}"
TaskResult 模型的 result 字段是一个 TextField,因此它的类型是字符串。我在views.py中使用的代码sn-p如下所示;
run_list = request.user.run_set.all().order_by('-start_time')
context = {'run_list': run_list}
return render(request, 'webapp/home.html', context)
当我尝试访问 run_list 中运行结果的元素时,我失败了。因为它不是模板中的 JSON 对象。我试了一下,代码sn-p如下图;
<table>
{% for run in run_list %}
<tr><td> {{run.task.result.average_cost}} </td></tr>
{% endfor %}
</table>
它什么也没有显示...之后我尝试将结果字段转换为 JSON,但我又失败了。尝试以下代码;
run_list = request.user.run_set.all().order_by('-start_time')
for run_item in run_list:
run_item.task.result = json.loads(json.loads(run_item.task.result))
那么,解决方案是什么?如何访问模板中结果字段的average_cost 元素?
【问题讨论】:
-
说“我又失败了”而不解释你是怎么失败的完全没用(参见idownvotedbecau.se/itsnotworking)。
-
是的,你是对的。我将添加失败的详细信息。谢谢。
标签: python json django django-celery