Django Admin的save_model方法并不会立即保存模型到数据库,而是只是创建了一个保存模型的数据库事务。这个事务会在save_model方法执行完毕后提交,也就是说,在save_model方法中,无论你把清除缓存的代码放在哪里,都是在模型真正保存到数据库之前执行的。
- 直接清除缓存,需要保存两次,第一次实际数据未保存
from django.contrib import admin
from django.core.cache import caches
from myapp.models import YourModel
class YourModelAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)
# 在这里清除缓存
caches['default'].delete(key)
admin.site.register(YourModel, YourModelAdmin)
- 使用transaction.on_commit来确保只有在事务成功提交后才执行某个操作
from django.contrib import admin
from django.core.cache import caches
from myapp.models import YourModel
class YourModelAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)
# 在这里清除缓存
transaction.on_commit(lambda: caches['default'].delete(key))
admin.site.register(YourModel, YourModelAdmin)