Аргумент после ** должен быть отображением, а не ошибкой str, с использованием celery, но не без его использования

У меня есть простая send_email_task() функция.

@shared_task
def send_email_task(subject, message, email_from, recipient_list):
    print("Email Sent", f"{subject, message, email_from, recipient_list}")
    send_mail(subject, message, email_from, recipient_list)

    return None

Я вызываю его в представлениях как :

send_email_task.apply_async(
                    subject, message, email_from, recipient_list)

Но я столкнулся с этой ошибкой, я не понимаю, что это такое, я пытался читать другие ответы на stack overflow, но не смог найти, как справиться с этой проблемой.

Редактирование Полное отслеживание

Internal Server Error: /api/v1/accounts/user/password/change/
Traceback (most recent call last):
  File "\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "\venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "\venv\lib\site-packages\django\views\generic\base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "\venv\lib\site-packages\rest_framework\views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "\venv\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "\venv\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
    raise exc
  File "\venv\lib\site-packages\rest_framework\views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "\venv\lib\site-packages\rest_framework\decorators.py", line 50, in handler
    return func(*args, **kwargs)
  File "\accounts\views.py", line 268, in password_change
    send_email_task.apply_async(
  File "\venv\lib\site-packages\celery\app\task.py", line 540, in apply_async
    check_arguments(*(args or ()), **(kwargs or {}))
TypeError: accounts.tasks.send_email_task() argument after ** must be a mapping, not str

При вызове apply или apply_async аргументы функции должны быть переданы в виде списка (или списка и dict для аргументов ключевых слов).

send_email_task.apply_async(
    [subject, message, email_from, recipient_list]
)

Ошибка происходит потому, что apply пытается использовать ваш второй параметр как дикту kwargs, а на самом деле это строка.

Вернуться на верх