传递整个
我正在尝试:但它抛出了一个TypeError: auto_sms() missing 1 required positional argument: 'request'
错误。
现在我正在考虑从views.py获取函数,并在tasks.py上调用它。如果requests
不在tasks.by上工作,我该怎么做?谢谢
@shared_task
def auto_sms(request):
responses = Rainfall.objects.filter(
level='Torrential' or 'Intense',
timestamp__gt=now() - timedelta(days=1),
)
count = responses.count()
if not (count % 10) and count > 0:
send_sms(request)
return
request
可能不是一个好主意,因为它可能包括Django模型对象,例如用户对象。现在,您将面临的问题是,如果存在不可序列化的对象,那么在调用该函数时会出现错误。因此,与其传递整个request
,不如发送您实际需要的数据。
例如,我猜你需要这里的用户向发送SMS。因此,与其传递包含用户对象的整个请求,不如发送user_id
,然后让用户到达那里。基本上,您必须确保所传递的数据是可序列化的。
传递Django模型的id通常是个好主意,因为在处理函数时数据可能会发生变化,如果传递整个数据,可能会得到旧数据。