我需要从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)
但是,我收到了我需要从django celery任务内部返回表单。我的任务从下面的Django视图中调用:类MyView(CreateView):model = MyModel form_class = MyForm success_url ='/ ...ImportError:无法导入名称'MyAnotherView'] >>。如果有人可以帮助我,我非常感谢!