Django admin 保存清除缓存,新手不小心就踩了坑

Django Admin的save_model方法并不会立即保存模型到数据库,而是只是创建了一个保存模型的数据库事务。这个事务会在save_model方法执行完毕后提交,也就是说,在save_model方法中,无论你把清除缓存的代码放在哪里,都是在模型真正保存到数据库之前执行的。

  1. 直接清除缓存,需要保存两次,第一次实际数据未保存
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)
  1. 使用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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。