这里例举了2种情况,第1种是新建数据模型(数据库中不存在同名表),第2种是数据库已经有表格了,需要根据已有表格自动生成数据模型。这里假设项目已经连接好了数据库,可进行下一步操作
一、新建数据模型。在models.py文件中根据Django规范建数据模型,如下举例代码
Code: [全选] [Expand/Collapse]
-
class Users(models.Model):
-
employeeid = models.CharField(unique=True, max_length=10, verbose_name=‘工号’)
-
name = models.CharField(max_length=20, verbose_name=‘姓名’)
-
password = models.CharField(max_length=20, verbose_name=‘密码’)
-
-
admin_choices = (
-
(1, "是"),
-
(0, "否"),
-
)
-
admin = models.BooleanField(‘管理员’, default=False, choices=admin_choices)
-
create_time = models.DateTimeField(auto_now_add=True, verbose_name=‘创建时间’)
-
update_time = models.DateTimeField(auto_now=True, verbose_name=‘更新时间’)
-
login_time = models.DateTimeField(auto_now=True, verbose_name=‘登录时间’)
-
-
# 输出对象时,设置显示出的内容
-
def __str__(self):
-
return self.name
-
-
class UserFields(models.Model):
-
user = models.ForeignKey(Users, related_name=‘user_fields’, on_delete=models.CASCADE, verbose_name=‘用户名’)
-
table_name = models.CharField(‘表名’, max_length=20)
-
fields_opt = models.JSONField(‘字段设置’, )
模型文件编辑完后,在项目manage.py所在目录命令行中执行
Code: [全选] [Expand/Collapse]
-
python manage.py makemigrations
-
python manage.py migrate
第一条命令会根据models.py文件在项目的”App\migrations”目录中生成生成数据库迁移文件,第二条命令会根据上条命令生成的代码,在数据库中生成(或叫数据迁移)User、UserFields两个数据表,同时还会自动生成Django自已需要的一些辅助表
二、根据已有表格自动生成数据模型。
在项目manage.py所在目录命令行中执行下面命令
Code: [全选] [Expand/Collapse]
-
python manage.py inspectdb
该命令会根据连接的数据库中已有的数据表格,自动在models.py文件中生成模型代码,注意当表名为中文时,生成的代码class类名为空,需要手动添加中文名(与中文表名相同)。同时还需要添加“managed = False”语句,该语句的作用是在进行数据库迁移时,包含这个语句的模型不需要迁移,也就是告诉它不需要在数据库中对该表作修改。举例代码如下 :
Code: [全选] [Expand/Collapse]
-
class 专项类别(models.Model):
-
序号 = models.AutoField(primary_key=True)
-
类别 = models.CharField(max_length=30)
-
-
class Meta:
-
managed = False
-
db_table = ‘专项类别’
-
-
-
class 作业区编码(models.Model):
-
序号 = models.AutoField(primary_key=True)
-
编码 = models.CharField(max_length=10, blank=True, null=True)
-
名称 = models.CharField(max_length=45, blank=True, null=True)
-
-
def __str__(self):
-
return self.名称
-
-
class Meta:
-
managed = False
-
db_table = ‘作业区编码’
原文作者: BG6RSH | 查看原帖