Ich stieß auf Verhalten, das ich dachte, war eine Art von Caching, aber es stellte sich heraus, dass Datenbanktransaktionen mich täuschen.
hatte ich das Problem, dass in einem anderen Verfahren wurden Elemente in die Datenbank hinzugefügt werden, und ich wollte Fortschritt des anderen Prozesses überwachen, so öffnete ich eine django Schale und gab die folgenden:
>>> MyData.objects.count()
74674
>>> MyData.objects.count()
74674
Der Wert änderte sich nicht, obwohl er tatsächlich in der Datenbank enthalten war. Ich erkannte, dass zumindest mit der Art, wie ich MySQL hatte & django Setup, dass ich in einer Transaktion war und würde nur eine "Momentaufnahme" der Datenbank zu dem Zeitpunkt, als ich die Transaktion geöffnet.
Da mit Ansichten in Django, Autocommit-Verhalten definiert hatte, war dies in Ordnung für jede Ansicht nur einen Schnappschuss zu sehen, als das nächste Mal eine Ansicht aufgerufen wurde, wäre es in einer anderen Transaktion. Aber für einen Code, der nicht automatisch festgeschrieben wurde, werden keine Änderungen in der Datenbank angezeigt, mit Ausnahme der in dieser Transaktion vorgenommenen Änderungen.
Nur gedacht, ich würde diese Antwort für jeden werfen, der auf diese Situation kommen könnte.
zu lösen, verpflichtet Ihre Transaktion, die manuell wie dies getan werden kann:
>> from django.db import transaction
>> transaction.enter_transaction_management()
>> transaction.commit() # Whenever you want to see new data
Mögliche Duplikat [Wie erzwinge ich Django alle Caches zu ignorieren und die Daten neu zu laden?] (Http://stackoverflow.com/questions/3346124/how-do-i-force- django-to-ignore-any-caches-and-reload-data) –