@DrowLegend

Django: как сделать изменяющийся статус загрузки при помощи Celery?

Суть задачи состоит в том, что есть форма для загрузки файла со статусом загрузки. Необходимо, чтобы после загрузки файла его статус был Pending, а спустя несколько секунд менялся на Success.
models.py
class UploadFile(models.Model):
    file = models.FileField()
    is_active = models.BooleanField(default='False')


views.py

def home(request):
    files = UploadFile.objects.all()

    if request.method == 'POST':
        upload_file_form = UploadFileForm(request.POST, request.FILES)

        if upload_file_form.is_valid():
            upload_file_form.save()
            return redirect(home)
    else:
        upload_file_form = UploadFileForm()
    return render(request, 'testfileapp/home.html', {
        'files': files,
        'upload_file_form': upload_file_form,
    })


signals.py

from django.dispatch import receiver
from django.db.models.signals import post_save
from .models import UploadFile
from .tasks import set_status_as_inactive


@receiver(post_save, sender=UploadFile)
def notify(sender, instance, created, **kwargs):
    if created:
        set_status_as_inactive.delay(instance.pk)


tasks.py (при таком коде выдает ошибку, что не может импортировать UploadFile)
from celery import shared_task
from .models import UploadFile


@shared_task
def set_status_as_inactive(pk):
    UploadFile.objects.get(pk=pk)
  • Вопрос задан
  • 221 просмотр
Пригласить эксперта
Ответы на вопрос 1
@antonksa
Вы подошли к вопросу не с той стороны. Классический POST не предусматривает чанков и загрузки по частям, поэтому нет смысла пытаться это (ваши статусы) реализовывать со стороны сервера. Все это запросто делается со стороны JS в браузере. Там можно использовать промисы, которые разрезолвятся по окончанию загрузки и вы сможете поменять статус на Success или Failed в зависимости от результата.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы