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没有效果
如何在 Django Summernote 中显示编程片段的代码块?
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段