码迷,mamicode.com
首页 > 其他好文 > 详细

Django 动态建表

时间:2019-04-19 17:37:16      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:def   val   int   stat   sed   cti   str   author   eve   

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Random_lee

# -*- coding: utf-8 -*-
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)


def install(custom_model):
	from django.db import connection
	from django.db.backends.base.schema import BaseDatabaseSchemaEditor
	editor = BaseDatabaseSchemaEditor(connection)
	try:
		editor.create_model(model=custom_model)  # 会抛出个异常,不知为啥,但表会创建
	except AttributeError as aerror:
		print(aerror)


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 动态建表

标签:def   val   int   stat   sed   cti   str   author   eve   

原文地址:https://www.cnblogs.com/randomlee/p/10737181.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!