Я столкнулся с поведением, которое, как я думал, было каким-то кешированием, но оказалось, что транзакции базы данных обманывают меня.
У меня была проблема, когда в другом процессе, предметы были добавляются в базу данных, и я хотел бы контролировать ход другого процесса, поэтому я открыл Джанго оболочку и выпустил следующее:
>>> MyData.objects.count()
74674
>>> MyData.objects.count()
74674
Значение не менялось, даже если оно действительно находилось в базе данных. Я понял, что, по крайней мере, с тем, как у меня была установка django для MySQL, я был в транзакции и видел только «моментальный снимок» базы данных при открытии транзакции.
С тех пор, как в представлении django у меня было задано автоматическое поведение, это было прекрасно для каждого вида, чтобы видеть только моментальный снимок, поскольку при следующем вызове вида он будет находиться в другой транзакции. Но для части кода, которая не была автоматически совершена, она не увидела никаких изменений в db, кроме тех, которые были сделаны в этой транзакции.
Просто подумал, что я отвечу на этот ответ всем, кто может прийти на эту ситуацию.
Чтобы решить, совершить транзакцию, которая может быть сделано вручную, как так:
>> from django.db import transaction
>> transaction.enter_transaction_management()
>> transaction.commit() # Whenever you want to see new data
Возможный дубликат [Как заставить Django игнорировать все кэши и перезагружать данные?] (Http://stackoverflow.com/questions/3346124/how-do-i-force- django-to-ignore-any-caches-and-reload-data) –