Django 动态建表

Posted randomlee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django 动态建表相关的知识,希望对你有一定的参考价值。

#!/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 动态建表的主要内容,如果未能解决你的问题,请参考以下文章

django models建表设置default=1和blank=True没有效果

hibernate动态创建表

如何在 Django Summernote 中显示编程片段的代码块?

动态 Rstudio 代码片段

是否可以动态编译和执行 C# 代码片段?

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段