django根据时间(年月日)动态修改表名--方法一

方法一:

第一步:在models创建一个类,里边存放数据表中需要的字段,如下

python 复制代码
class TemplateModel(models.Model):
    NowTime = models.CharField(max_length=5)
    name = models.CharFiedld(max_length=5)
    class Meta:
        abstract = True  # 基础类设置为抽象模型,不会生成实际数据库表

第二步:

在models.py创建一个方法,也可以写在views.py,由于我需要的时间是202436,3表示月,6表示日,所以将月和日的格式转换了一下
module : 这是一个特殊属性,表示类所属的模块名称。在这里设置为 name,意味着新创建的类所在的模块将与当前执行该代码的模块相同。

'Meta': type('Meta', (object,), {'db_table': table_name, 'managed': False}):

这部分是在创建一个嵌套的类 Meta,它继承自 object 类。

Meta 类常常在ORM(如Django ORM或其他Python ORM框架)中用来存储模型级别的元数据信息。

'db_table': 这是一个字段,用于指定数据库中的表名,这里将其设置为变量 table_name 的值。

'managed': False:在某些ORM框架中,这意味着该模型由外部系统管理(非ORM框架自身),即ORM不会自动处理该模型相关的数据库迁移和同步操作。

因此,整个 attrs 字典的作用是构建一个类定义,其中包含了一个描述数据库表结构的内部类 Meta,并指定了新类所属的模块名称,这些属性会被用于构造一个符合特定需求的新模型类

python 复制代码
**def create_model_for_date(date):
    # 获取当前日期时间对象
    today = datetime.today()
    current_date = datetime.now()
    month = str(current_date.month)
    day = str(current_date.day)
    //拼接表名
    table_name = f'table{current_date.year}{month}{day}'
    attrs = {
        '__module__': __name__,
        'Meta': type('Meta', (object,), {'db_table': table_name, 'managed': False}),
    }
    model_class = type(f'DailyData_{date}', (TemplateModel,), attrs)
    return model_class**

第三步:我们在views.py中操作,我们获取当前时间作为第二步方法的参数,然后执行django的查询语句,由于我数据表中日期格式是varchar,我将日期转换一下,并进行排序取第一条。

python 复制代码
	today = datetime.today()
    TodayModel = create_model_for_date(today)
    data = TodayModel.objects.all()
    sorted_data = sorted(data, key=lambda x: datetime.strptime(x.NowTime, '%Y/%m/%d %H:%M:%S'), reverse=True)
    latest_entry = sorted_data[0]

第四步:前端页面,接收views.py传来的数据,也就是第三步获得的数据,在前端页面js显示,我将input标签的name和value设置为和数据库字段名

html 复制代码
function update_frame3(){
         $.ajax({
            url: '/aaa/update_frame3/',
            type: 'GET',
            dataType: 'json',
            success: function(response) {
                response.data.forEach(function(item) {
                    //遍历对象item的所有可枚举属性,每次循环将当前属性名赋值给变量key
                    for (var key in item) {
                         // 检查该属性是否为item对象自身的属性
                        if (item.hasOwnProperty(key)) {
                            // 将值设置到表单中
                            var inputElement = document.getElementById(key);
                            if (inputElement) {
                                inputElement.value = item[key];
                            }
                        }
                    }
                });
            },
        });
     }
相关推荐
焦糖布丁的午夜10 分钟前
MySQL数据库大王小练习
数据库·mysql
狗头实习生1 小时前
Spring常见的事务失效原因
java·数据库·spring
冉冰学姐1 小时前
SSM泰兴市公交信息系统f504u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架应用·泰兴市公交·息管理系统
偶像你挑的噻3 小时前
3.Qt-基础布局以及事件
开发语言·数据库·qt
Dxy12393102163 小时前
MySQL如何做读写分离架构
数据库·mysql·架构
毕设十刻5 小时前
基于Vue的考勤管理系统8n7j8(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
合方圆~小文5 小时前
不同画面,三个镜头实时监控拍摄方案
数据结构·数据库·人工智能
cqsztech5 小时前
docker环境下 Oracle 19c 标准版如何转换为19c 企业版
docker·oracle·容器
ChrisitineTX6 小时前
凌晨突发Java并发问题:synchronized锁升级导致接口超时,排查过程全记录
java·数据库·oracle
极限实验室6 小时前
Easysearch 2.0.0 性能测试
数据库·性能优化