Je suis en utilisant le Django modèles de base de données à partir d'un processus qui n'est pas appelée à partir d'une requête HTTP. Le processus est censé sondage pour les nouvelles données en quelques secondes et faire un peu de traitement. J'ai une boucle qui dort pendant quelques secondes, puis il reçoit toutes les données non gérée à partir de la base de données.
Ce que je vois, c'est que, après la première extraction, le processus ne voit jamais de nouvelles données. J'ai couru quelques tests et il semble que Django est la mise en cache des résultats, même si je suis en train de construire de nouveaux QuerySets à chaque fois. Pour vérifier cela, je l'ai fait à partir d'une interface Python:
>>> MyModel.objects.count()
885
# (Here I added some more data from another process.)
>>> MyModel.objects.count()
885
>>> MyModel.objects.update()
0
>>> MyModel.objects.count()
1025
Comme vous pouvez le voir, l'ajout de nouvelles données ne change pas le résultat de comptage. Toutefois, appeler le gestionnaire de la méthode update() semble résoudre le problème.
Je ne trouve pas de documentation sur la méthode update() et n'ont aucune idée de ce que d'autres mauvaises choses, il peut le faire.
Ma question est, pourquoi suis-je en voyant ce comportement de mise en cache, ce qui contredit ce que Django docs dire? Et comment puis-je l'empêcher de se produire?