我有这些表
exam(id, start_date, deadline, duration)
exam_answer(id, exam_id, answer, time_started, status)
exam_answer.status可能的值为0 - 尚未开始1-started 2-submitted
有没有办法立即更新exam_answer.status-- exam_answer.time_started大于exam.duration?或者如果它已经过了截止日期?
我还会提到这个,如果它可以帮助我更好,我正在为django项目建立这个。
答案 0 :(得分:1)
与任何其他WSGI / Web应用程序一样,Django应用程序仅用于处理请求 - 响应流程。如果没有任何请求,则没有活动,也不会发生此类更改。
您可以编写由cron作业定期执行的custom management command,但是您可能会遇到可能显示错误数据的风险。在任何相关视图开始处理之前,您可以使用优雅的方法来计算状态,但这可能会浪费资源。
您最好的选择可能是将任务计划程序与您的应用程序集成,例如Celery。不要气馁,因为Celery似乎在多个机器上的并发多进程环境中运行 - 该服务可以配置为在单线程中运行,并且它提供了一个干净的接口来调度必须在某个特定点运行的任务。将来