如何从celery任务中返回django视图?

问题描述 投票:0回答:1

我需要从django celery任务内部返回表单。我的任务从下面的django视图中调用:

class MyView(CreateView):
    model = MyModel
    form_class = MyForm
    success_url = '/create/form'

    def form_valid(self, form):
        form.save()
        # I call my task in here
        period.delay()
        print("Loading task...")

        return super(MyView, self).form_valid(form)

我的任务的名称是“ period”,当我的[[IF中的条件为true时,它将日期与打开事件的目标进行比较。我的“ event”是用户必须确认在场的处方。

我的任务:

from .views import MyAnotherView # others imports... """ in my settings.py, I had to call tha task every minute: CELERYBEAT_SCHEDULE = { 'add-periodic-events': { 'task': 'myapp.tasks.period', 'schedule': crontab(minute='*'), } } """ @shared_task(serializer='json') def period(): event = MyModel.objects.get(id=1) # I limited my model to receive only one object request = RequestFactory.get('/another/form') view = MyAnotherView() week_d = week_day(event.day) # day is a field of my model event_d = event_day(week_d, event.hour) # hour is a field of my model conf_d = presence_confirm(event.before_days, event.begin_hour, event_d) # before_days and begin_hour are fields of my model utc_now = pytz.utc.localize(datetime.utcnow()) n = utc_now.astimezone(pytz.timezone('America/Recife')) t_str = '{}-{}-{}'.format(n.year, n.month, n.day) t_hour = ' {}:{}'.format(n.hour, n.minute) today = t_str + t_hour today = datetime.strptime(today, '%Y-%m-%d %H:%M') if (today >= conf_d) and (today < event_d): # HOW TO CALL MY FORMULARY??? print("Call my formulary") view.setup(request) else: # another thing

我想在调用任务后并且条件为真时显示的公式将来自django模型,如下所示:

class MyAnotherModel(models.Model): OPTIONS = ( (True, 'Sim'), (False, 'Não'), ) player = models.OneToOneField(MyUserModel, primary_key=True, on_delete=models.CASCADE) confirm = models.BooleanField(choices=OPTIONS, default=False) modified = models.DateTimeField(auto_now_add=True)

简而言之,我希望我的处方在我的情况为真时出现。因此,我尝试将RequestFactory.get用于任务,以捕获URL并调用视图(MyAnotherView)。 

# ... request = RequestFactory.get('/another/form') view = MyAnotherView() # View responsável em instanciar MyAnotherModel # ... if (today >= conf_d) and (today < event_d): view.setup(request)

但是,我收到了

ImportError:无法导入名称'MyAnotherView'] >>。如果有人可以帮助我,我非常感谢!

我需要从django celery任务内部返回表单。我的任务从下面的Django视图中调用:类MyView(CreateView):model = MyModel form_class = MyForm success_url ='/ ...
django django-celery celery-task
1个回答
0
投票
我的问题是检查今天的日期是否在两个日期之间。如果是这样,我必须“显示”表格。我用芹菜做的这张支票。我的问题是,只要今天的日期在启用表格的日期之间,我该怎么做。我解决了如下问题:
© www.soinside.com 2019 - 2024. All rights reserved.