Я просмотрел такие вопросы, как этот один и дюжину других. Но ни один из них, кажется, не работает.
У меня есть shared_task, подобная этой, которая ничего не возвращает:
@shared_task
def rename_widget(widget_id, name):
w = Widget.objects.get(id=widget_id)
w.name = name
w.save()
Я пробовал self.request.id
и current_task.request.id
, но они оба вернули None.
Моя версия сельдерея — 5.0.4, а версия django — 3.1.1. Я использую Rabbitmq в качестве мессенджера.
Да, конечно. Возвращает Нет.
извините, нужно больше контекста: 1. вы импортировали модель?
Похоже, проблема с настройкой или с тем, как вы вызываете задачу. Не зная контекста, трудно сказать - возможно, вам нужно привязать метод? Я набросал это решение:
задачи.py
from celery import shared_task
from demoapp.models import Widget
@shared_task(bind=True)
def rename_widget(self, widget_id, name):
print(self.request.id)
w = Widget.objects.get(id=widget_id)
w.name = name
w.save()
views.py или где-то еще:
from tasks import rename_widget
result = rename_widget.delay(1, 'new_name')
Если это не проблема, я бы проверил полный рабочий пример настройки Django для идей, найденный здесь: https://github.com/celery/celery/tree/master/examples/django/
Это я так называл. Спасибо.
а вы пробовали: rename_widget.request.id?