You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Django createcachetable生成的缓存表使用自定义timestamp(0)字段

给Django数据库缓存表用timestamp(0)时间戳的方法

你已经写好了自定义的DateTimeWithoutTZField,要把它用到createcachetable创建的缓存表里,得重写Django默认的数据库缓存后端逻辑,具体操作如下:

1. 编写自定义数据库缓存后端

在项目里找个合适的位置(比如新建cache_utils.py文件),继承默认的数据库缓存后端类,并重写表创建逻辑,把默认日期字段替换成你的自定义字段:

from django.core.cache.backends.db import DatabaseCache
from django.db import models
from django.utils.timezone import now

# 导入你之前定义的自定义字段,替换成实际的文件路径
from your_app.models import DateTimeWithoutTZField

class CustomDBCache(DatabaseCache):
    def _create_table(self):
        # 定义缓存表的模型结构,将expires字段替换为自定义的DateTimeWithoutTZField
        class CacheEntry(models.Model):
            cache_key = models.CharField(max_length=255, primary_key=True)
            value = models.TextField()
            expires = DateTimeWithoutTZField(default=now)

            class Meta:
                db_table = self._table
                managed = False

        # 使用这个自定义模型创建缓存表
        with self.connection.schema_editor() as editor:
            editor.create_model(CacheEntry)

2. 修改settings中的缓存配置

打开settings.py,把默认的数据库缓存后端替换为你刚编写的自定义类:

CACHES = {
    'default': {
        'BACKEND': 'your_project.cache_utils.CustomDBCache',  # 替换为你的实际文件路径
        'LOCATION': 'my_cache_table',  # 填写你要创建的缓存表名称
    }
}

3. 创建自定义缓存表

现在运行createcachetable命令,就会基于自定义字段生成缓存表了:

python manage.py createcachetable my_cache_table

注意事项

  • 如果之前已经创建过默认缓存表,需要先删除旧表再重新执行创建命令,否则字段类型不会更新。
  • 确保自定义字段的导入路径正确,避免出现找不到类的错误。
  • 这个自定义后端仅修改了表创建时的字段类型,其余缓存逻辑和默认数据库缓存完全一致,不影响原有缓存功能。

内容的提问来源于stack exchange,提问作者Marcos DaSilva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 20:20:07