Я использую Celery для выполнения задачи в фоновом режиме при отправке формы. Как только форма отправлена во время запроса POST, я создал задачу для выполнения в фоновом режиме, используя метод задержки. Эта задача обрабатывает некоторые операции щелчка в другой сети с помощью веб-драйвера selenium и возвращает два списка python после выполнения задачи. На основе содержимого списка я хочу отобразить всплывающее сообщение.
Когда я выполняю задачу с использованием сельдерея и запускаю сервер веб-разработки 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] с использованием сельдерея результат.