# 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. svn项目添加到tomcat后,tomcat无法打开问题解决

    1,tomcat版本更改 由7.0.81更改至8.0.47(8.5.23在添加至eclipse后版本不符无法使用) 更改版本后记得修改Server Locations-->双击服务器--> ...

  2. js 切割逗号

    使用string对象的split()方法可以处理.例如:var yourString=“12,25,24,234,234,”;var result=yourString.split(",&q ...

  3. Android课程设计第四天ListView运用

    注意:课程设计只为完成任务,不做细节描述~ 效果图 <?xml version="1.0" encoding="utf-8"?> <Relat ...

  4. 1-9方法的重写(override)

    什么是重写? 重写,也叫做覆盖,当父类中的方法无法满足子类需求时,子类可以将父类的方法进行重写编写来满足需求.比如孩子继承了父亲的房子,可以将房子重新装修. 方法重写的条件: 两个类必须是继承关系 必 ...

  5. hbuilder 中文乱码

    这是因为HBuilder默认文件编码是UTF-8,你可以在工具-选项-常规-工作空间选项中设置默认字符编码

  6. Reference for shell scripting

    ${var} 和 $var的区别 http://stackoverflow.com/questions/8748831/when-do-we-need-curly-braces-in-variable ...

  7. 关于line-height的理解(如何实现psd稿件上下文字距离为10px)

  8. AJPFX总结jvm运行时内存分布

    jvm的运行过程中将java程序运行时数据区分为以下几个部分:      (1)程序计数器:存储虚拟机字节码执行的地址 (2)java虚拟机栈:java方法运行时的局部变量表,操作数栈,方法出口等 ( ...

  9. PE刷题记

    PE 中文翻译 最喜欢做这种很有意思的数学题了虽然数学很垃圾 但是这个网站的提交方式好鬼畜啊qwq 1.Multiples of 3 and 5 直接枚举 2.Even Fibonacci numbe ...

  10. SEO & HTML语义化

    SEO SEO的概念:搜索引擎优化,常见的搜索引擎有百度.谷歌等.优化的话,就是通过我们的处理,使得我们的网站在搜索引擎下有一个理想的结果. SEO的目的:当用户在搜索引擎上搜索关键词的时候,看到我们 ...