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

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

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

第二步:

class NewDynamicModel(object):
    #定义一个字典变量 _instance 用于存储已经创建过的动态模型类
    _instance = dict()

    #一个特殊的方法,重写Python对象实例化时的行为。当调用这个类时,实际上会执行 __new__ 方法而非 __init__ 方法
    #base_cls 在这段代码中是一个基础类(base class),它通常用于作为动态创建的新类的父类
    def __new__(cls, base_cls, date=None):
        # 将date转换
        if not date:
            current_date = datetime.now()
            month = str(current_date.month)
            day = str(current_date.day)
            date = f'{current_date.year}{month}{day}'

        #根据基础类名和格式化后的日期生成新类名,形如BaseModel_To_20220516
        new_cls_name = "%s_To_%s" % (
            base_cls.__name__, '_'.join(map(lambda x: x.capitalize(), date.split('_'))))

        #首先检查 new_cls_name 是否已经存在于 cls._instance 字典中。_instance 是一个字典,用于存储已创建的类实例
        if new_cls_name not in cls._instance:
            #获取 base_cls 类上的 Meta 类属性,并将其赋值给 new_meta_cls
            new_meta_cls = base_cls.Meta
            
            #修改 new_meta_cls.db_table 属性,将其设置为 'table' 加上格式化后的日期字符串
            new_meta_cls.db_table = 'table' + date
            
            #model_cls 是通过 type() 函数动态创建的一个新类,new_cls_name:新创建类的名字
            #元组形式,表示新类继承自 base_cls 类,'__module__': 设置为当前类所在模块的名字
            model_cls = type(new_cls_name, (base_cls,),
                             {'__tablename__': date, 'Meta': new_meta_cls, '__module__': cls.__module__})
            
            #将新创建的类实例添加到 cls._instance 字典中,键为 new_cls_name,这样在后续调用时可以直接通过名字获取到该类
            cls._instance[new_cls_name] = model_cls

        return cls._instance[new_cls_name]

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

    TodayModel = NewDynamicModel(TemplateModel)
    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设置为和数据库字段名

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];
                            }
                        }
                    }
                });
            },
        });
     }

相关推荐

  1. django根据时间年月动态修改--方法

    2024-03-14 15:14:02       41 阅读
  2. django动态技术(根据日期,年月方法

    2024-03-14 15:14:02       50 阅读
  3. Linux动态库*.so函数修改

    2024-03-14 15:14:02       43 阅读
  4. vue将中国标准时间转成年月

    2024-03-14 15:14:02       34 阅读
  5. ORACLE修改实例和dbname方法

    2024-03-14 15:14:02       37 阅读
  6. mybatis-plus 动态简易使用

    2024-03-14 15:14:02       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-14 15:14:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-14 15:14:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-14 15:14:02       82 阅读
  4. Python语言-面向对象

    2024-03-14 15:14:02       91 阅读

热门阅读

  1. ES6 Nunber类型、Math对象扩展

    2024-03-14 15:14:02       38 阅读
  2. IOS面试题object-c 81-90

    2024-03-14 15:14:02       42 阅读
  3. mysql数据库备份恢复

    2024-03-14 15:14:02       37 阅读
  4. Python: for,while循环语句

    2024-03-14 15:14:02       51 阅读
  5. JDK、JRE和JVM的区别

    2024-03-14 15:14:02       38 阅读
  6. 后端各种格式传参混合vue前端传参

    2024-03-14 15:14:02       44 阅读
  7. FFmpeg--packet数据包和frame数据帧的区别

    2024-03-14 15:14:02       34 阅读
  8. STM32单片机实现串口通信

    2024-03-14 15:14:02       32 阅读
  9. git--协同开发

    2024-03-14 15:14:02       44 阅读
  10. 医药电商大数据实践

    2024-03-14 15:14:02       39 阅读