# Create your models here.
from django.db import models # name是表名,fields是字段,app_label是你的应用名(如:flow),module是应用下的模型(如:flow.models),options是元类选项
def create_model1(name, fields=None, app_label='', module='', options=None):
class Meta: # 模型类的Meta类
pass if app_label: # 必须在元类中设置app_label,相关属性可参考https://www.cnblogs.com/lcchuguo/p/4754485.html
setattr(Meta, 'app_label', app_label) # 更新元类的选项 if options is not None:
for key, value in options.items():
setattr(Meta, key, value) # 设置模型的属性
attrs = {'__module__': module, 'Meta': Meta} # 添加字段属性
if fields:
attrs.update(fields) # 创建模型类对象
return type(name, (models.Model,), attrs) #用type动态创建类 def install(custom_model):
from django.db import connection
from django.db.backends.base.schema import BaseDatabaseSchemaEditor """
fix:
editor = BaseDatabaseSchemaEditor(connection)
try:
editor.create_model(model=custom_model) # 会抛出个异常,不知为啥,但表会创建
except AttributeError as error:
print(error)
在BaseDatabaseSchemaEditor类中有一个__enter__方法,
需要通过with上下文打开以后deferred_sql变量才会在实例化后赋值给editor
这样就不会有'BaseDatabaseSchemaEditor' object has no attribute 'deferred_sql' """
with BaseDatabaseSchemaEditor(connection) as editor:
editor.create_model(model=custom_model) def CreateNewTab(tabdate):
fields = {
"name": models.CharField(max_length=30),
"job_number": models.IntegerField(unique=True),
"even_shift": models.CharField(max_length=1024),
"administrator_shift": models.CharField(max_length=1024),
"middle_shift": models.CharField(max_length=1024),
"meeting_ops": models.CharField(max_length=1024),
"meeting_ops_manager": models.CharField(max_length=1024),
"checking_station": models.CharField(max_length=1024),
'__str__': lambda self: '%s %s %s %s %s %s %s %s' % (
self.name,
self.job_number,
self.even_shift,
self.administrator_shift,
self.middle_shift,
self.meeting_ops,
self.meeting_ops_manager,
self.checking_station,
), }
options = {'ordering': [
"name",
"job_number",
"even_shift",
"administrator_shift",
"middle_shift",
"meeting_ops",
"meeting_ops_manager",
"checking_station",
], 'verbose_name': 'valued customer', }
custom_model = create_model1(name=tabdate, fields=fields, options=options, app_label='ops_shift_',
module='flow.models')
install(custom_model) # 同步到数据库中

 

Django 动态建表的更多相关文章

  1. Oracle 存储过程动态建表

    动态sql,顾名思义就是动态执行的sql,也就是说在没执行之前是动态的拼接的. 任务 传入参数:新建的表名hd+当前的年和月,例如hd_201105表结构是:字段1:id ,类型是number,可以自 ...

  2. Mybatis动态建表

    在网上查了很多,都说Mybatis不支持动态建表,心凉了一节.还好找到这么一篇,找到了希望:http://www.zzzyk.com/show/ec5660d9cf1071b3.htm 经过在mysq ...

  3. MongoDB动态建表方案(官方原生驱动)

    MongoDB动态建表方案(官方原生驱动) 需求前提:表名动态,表结构静态,库固定 1.导入相关依赖 <dependency> <groupId>org.mongodb< ...

  4. django 数据库建表流程,与表结构

    目录 配置数据库 创建表结构 多表关连的设置 自创建关联表方法 自建表 和 ManyToManyField 联合使用 配置数据库 在Django项目的settings.py文件中,配置数据库连接信息: ...

  5. Django ORM --- 建表、查询、删除基础

    1.什么是ORM ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的 ...

  6. django -- ORM建表

    前戏 ORM(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. ORM的优势: ORM解决的主要问题是对象和关系的映射 ...

  7. Mysql + Mybatis动态建表

    service层业务 package com.zx.common.service.impl; import com.zx.common.entity.SysUser; import com.zx.co ...

  8. 菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表

    项目用的是SSH基础框架,当中有一些信息非常相似,但又不尽同样.假设每个建一个实体的话,那样实体会太多.假设分组抽象,然后继承,又不是特别有规律.鉴于这样的情况.就打算让用户自己配置要加入的字段,然后 ...

  9. MyBatis动态创建表

    转载请注明出处:https://www.cnblogs.com/Joanna-Yan/p/9187538.html 项目中业务需求的不同,有时候我们需要动态操作数据表(如:动态建表.操作表字段等).常 ...

随机推荐

  1. hdu 2818 Building Block 种类并查集

    在进行并的时候不能瞎jb并,比如(x, y)就必须把x并给y ,即fa[x] = y #include <iostream> #include <string> #includ ...

  2. Asp.net core 框架整理

    https://github.com/thangchung/awesome-dotnet-core#cms

  3. php.ini配置文件位置

    laravel之今天遇到个意想不到的问题: 我在测试文件上传,大于2M的文件时候hasFile() 方法报错,这一定是文件大小限制.接下来就跳坑了 1.首先查找php.ini的位置,就用find / ...

  4. Java图解

    java虚拟机 JVM运行过程: java开发工具包 java入门图解1 java入门图解2 java入门图解3 java入门图解4

  5. rhel6.5--http练习

    包名 简介 httpd-2.2.15-29.el6_4.x86_64.rpm         http服务的主程序包 httpd-devel-2.2.15-29.el6_4.x86_64.rpm ap ...

  6. Spark MLlib编程API入门系列之特征选择之向量选择(VectorSlicer)

    不多说,直接上干货! 特征选择里,常见的有:VectorSlicer(向量选择) RFormula(R模型公式) ChiSqSelector(卡方特征选择). VectorSlicer用于从原来的特征 ...

  7. Java基础学习-一切皆为对象

    一切皆为对象 引用 String s; //s是引用,并不是对象. String s = "asdf" //创建一个引用的同时便进行初始化

  8. hash系列集合的性能优化

    hash系列的集合: HashSet.LinkedHashSet     采用hash算法决定元素在集合中的存储位置 HashMap.LinkedHashMap.Hashtable   采用hash算 ...

  9. Oracle | Java日期处理

    public class Test{         public static void main (String args []){                               j ...

  10. smile domain name www.bn-nd.com for sell. Please contact boyanzheng at foxmail.com 微笑的域名。请联系邮箱。