1. # Create your models here.
  2. from django.db import models
  3.  
  4. # name是表名,fields是字段,app_label是你的应用名(如:flow),module是应用下的模型(如:flow.models),options是元类选项
  5. def create_model1(name, fields=None, app_label='', module='', options=None):
  6. class Meta: # 模型类的Meta类
  7. pass
  8.  
  9. if app_label: # 必须在元类中设置app_label,相关属性可参考https://www.cnblogs.com/lcchuguo/p/4754485.html
  10. setattr(Meta, 'app_label', app_label) # 更新元类的选项
  11.  
  12. if options is not None:
  13. for key, value in options.items():
  14. setattr(Meta, key, value) # 设置模型的属性
  15. attrs = {'__module__': module, 'Meta': Meta} # 添加字段属性
  16. if fields:
  17. attrs.update(fields) # 创建模型类对象
  18. return type(name, (models.Model,), attrs) #用type动态创建类
  19.  
  20. def install(custom_model):
  21. from django.db import connection
  22. from django.db.backends.base.schema import BaseDatabaseSchemaEditor
  23.  
  24. """
  25. fix:
  26. editor = BaseDatabaseSchemaEditor(connection)
  27. try:
  28. editor.create_model(model=custom_model) # 会抛出个异常,不知为啥,但表会创建
  29. except AttributeError as error:
  30. print(error)
  31. 在BaseDatabaseSchemaEditor类中有一个__enter__方法,
  32. 需要通过with上下文打开以后deferred_sql变量才会在实例化后赋值给editor
  33. 这样就不会有'BaseDatabaseSchemaEditor' object has no attribute 'deferred_sql'
  34.  
  35. """
  36. with BaseDatabaseSchemaEditor(connection) as editor:
  37. editor.create_model(model=custom_model)
  38.  
  39. def CreateNewTab(tabdate):
  40. fields = {
  41. "name": models.CharField(max_length=30),
  42. "job_number": models.IntegerField(unique=True),
  43. "even_shift": models.CharField(max_length=1024),
  44. "administrator_shift": models.CharField(max_length=1024),
  45. "middle_shift": models.CharField(max_length=1024),
  46. "meeting_ops": models.CharField(max_length=1024),
  47. "meeting_ops_manager": models.CharField(max_length=1024),
  48. "checking_station": models.CharField(max_length=1024),
  49. '__str__': lambda self: '%s %s %s %s %s %s %s %s' % (
  50. self.name,
  51. self.job_number,
  52. self.even_shift,
  53. self.administrator_shift,
  54. self.middle_shift,
  55. self.meeting_ops,
  56. self.meeting_ops_manager,
  57. self.checking_station,
  58. ), }
  59. options = {'ordering': [
  60. "name",
  61. "job_number",
  62. "even_shift",
  63. "administrator_shift",
  64. "middle_shift",
  65. "meeting_ops",
  66. "meeting_ops_manager",
  67. "checking_station",
  68. ], 'verbose_name': 'valued customer', }
  69. custom_model = create_model1(name=tabdate, fields=fields, options=options, app_label='ops_shift_',
  70. module='flow.models')
  71. install(custom_model) # 同步到数据库中
  1.  

 

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. Typora练习测试

    目录 一级标题 二级标题 三级标题 一级标题 二级标题 三级标题 这是下划线 删除线 字体加粗ctrl+b 这是倾斜线 1111 牛奶 面包 鸡蛋 包子 蛋糕 测试 牛奶 面包 鸡蛋 电脑 鼠标 键盘 ...

  2. wordpress数据库结构及表说明

    数据表结构: wp_commentmeta:存储评论的元数据wp_comments:存储评论wp_links:存储友情链接(Blogroll)wp_options:存储WordPress系统选项和插件 ...

  3. oracle 表空间及查看所有用户的表空间

    用户有默认表空间,但是只能指定一个,但是你有其它表空间的限额的话,可以将表建到其它表空间中. 语法 create table xxx(xxxx xx) tablespace xxxxx 1.查看当前用 ...

  4. memcache操作

    1 格式(telnet) <command name> <key> <flags> <exptime> <bytes> a) <com ...

  5. nginx上游模块

    1 概念 The ngx_http_upstream_module is used to define groups of servers that can be referenced by the  ...

  6. 接口测试postman和Jmeter

    接口测试属于功能测试的范畴,一般来说分为两种,一种是程序内部的接口,一种是系统对外的接口. postman测试接口 1. get请求: (1) 直接在浏览器中输入接口地址+?+参数 (2)使用post ...

  7. bzoj 4821 [Sdoi2017]相关分析

    题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4821 题解 做法显然 就是维护一颗线段树 里面装4个东西 区间x的和 区间y的和 区间$x^ ...

  8. Android课程设计第五天欢迎界面(滑动)和图形选择

    注意:课程设计只为完成任务,不做细节描述~ 滑动界面 package com.example.myapplication; import android.content.Intent; import ...

  9. WebStorm 10.0.3注册码

    UserName:William ===== LICENSE BEGIN ===== 45550-12042010 00001SzFN0n1bPII7FnAxnt0DDOPJA INauvJkeVJB ...

  10. [转]ASP.NET MVC Bootstrap极速开发框架

    本文转自:http://www.cnblogs.com/smartbooks/p/3814927.html 前言 每次新开发项目都要从头开始设计?有木有一个通用的快速开发框架?并且得是ASP.NET ...