您可以通过在您的django视图中添加延迟来确认是否是滞后问题,以在任务成功完成几秒钟后等待。如果这样可以解决问题,则可能需要将handle_upload包装在一个事务中以阻塞,直到数据库完全确认返回之前已完成。
除了Django外,DB也有自己的缓存。当django调用queryset时,它会从自己的缓存中获取陈旧数据(除非您正在重新使用查询集(除非在您发布的代码部分中没有看到),否则不太可能),或者数据库正在为同一Django连接缓存结果。
例如,如果您要在一个完全新的Django请求/视图中完成celery任务后调用后处理,您可能会看到DB中的新更改就好了。但是,由于在执行任务时视图被阻塞(这与celery btw的目的背道而驰),因此内部django仅在进入视图时保留数据库的快照。因此,您的获取失败,您仅在进入django shell时就直接确认了此行为。