我正在使用Celery在窗体的后台执行任务 提交。在POST请求期间提交表单后,我有 使用延迟方法创建了一个在后台执行的任务。 此任务使用来处理其他网站上的某些点击操作 Selenium Web驱动程序并在任务后返回两个python列表 执行。根据列表内容,我要显示弹出消息。
当我使用celery执行任务并运行Django网站时 提交表单上的开发服务器,我收到错误消息: “ AsyncResult”对象不可迭代。”
请提出如何解决此问题的建议,然后继续进行操作。
这是我的代码段: 通过网页上的硒操作获得的示例列表内容如下:
board_not_used_list = ['16123','14960'] board_mgr_permissions_not_present_list = [ '23456','45678']
views.py:
--------
def conclude_key_issue_form(request, id=None):
if id:
action = 'edit'
model = get_object_or_404(ConcludeKeyIssues, pk=id)
else:
action = 'submit'
model = ConcludeKeyIssues()
message = ""
if request.method == 'POST':
form = ConcludeKeyIssuesForm(request.POST, instance=model)
selected_model_name = request.POST.get('registered_model')
if form.is_valid():
new_key_issue_request = form.save(commit=False)
new_key_issue_request.integrator_id = request.user.username
integrator_username = new_key_issue_request.integrator_id
integrator_password = form.cleaned_data['integrator_pwd']
new_key_issue_request.integrator_pwd = integrator_password
new_key_issue_request.save()
form.save_m2m()
created_pk = new_key_issue_request.pk
if id is None:
board_not_used_list,
board_mgr_permissions_not_present_list=
task_check_board_availability_and_permissions.delay(created_pk)
if board_not_used_list and
board_mgr_permissions_not_present_list:
alert_flag = True
alert_message = "SAS Board ID's:{} in Not Used state."
context = {'form': form, 'registered_model_data': registered_models,
'alert': alert_flag, 'alert_message': json.dumps(alert_message)}
return render(request, 'ConcludeKeyIssue.html', context)
elif not board_not_used_list and board_mgr_permissions_not_present_list:
alert_flag = True
alert_message = "You don't have Board Manager Permissions"
context = {'form': form, 'registered_model_data': registered_models,
'alert': alert_flag, 'alert_message': json.dumps(alert_message)}
return render(request, 'ConcludeKeyIssue.html', context)
return HttpResponseRedirect('/swatapp/ConcludeKeyIssueList')
else:
print("Fill Conclude Key Issues")
form = ConcludeKeyIssuesForm(instance=model)
context = {'form': form,'Message': message, 'action': action}
return render(request, 'ConcludeKeyIssue.html', context)
Tasks.py:
--------
@app.task(name="task_check_board_availability_and_permissions")
def task_check_board_availability_and_permissions(created_pk):
print("From tasks.py conclude_key_issue_through_selenium")
print("Conclude Key Issue Through Selenium")
latest_record_pk = created_pk
# Get the instances of ConcludeKeyIssues
conclude_key_issue_obj_list = ConcludeKeyIssues.objects.all()
# Get the latest created record details
get_created_record_details = ConcludeKeyIssues.objects.get(pk=latest_record_pk)
# Get the id or location value of selected from SAS URL
sas_board_ids = get_created_record_details.sas_ids
# Get SAS Board IDs in list
sas_board_ids_list = sas_board_ids.split(",")
# Input username and password
username = get_created_record_details.integrator_id
password = get_created_record_details.integrator_pwd
board_not_used_list, board_mgr_permissions_not_present_list = \
check_board_availability_and_permissions_for_all_requested_sas(sas_board_ids_list, username,
password)
return board_not_used_list, board_mgr_permissions_not_present_list
settings.py:
------------
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'crispy_forms',
'swatapp',
'django_celery_results',
]
CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672//'
CELERY_RESULT_BACKEND = 'django-db'
1。请提出解决此错误的方法,然后继续进行操作。
2。如何使用以下方法检索2个列表[board_not_used_list,board_mgr_permissions_not_present_list] 芹菜结果。