由 BG6RSH » 周一 1月 16, 2023 10:03 pm
这里例举了2种情况,第1种是新建数据模型(数据库中不存在同名表),第2种是数据库已经有表格了,需要根据已有表格自动生成数据模型。这里假设项目已经连接好了数据库,可进行下一步操作
一、新建数据模型。在models.py文件中根据Django规范建数据模型,如下举例代码
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所在目录命令行中执行
python manage.py makemigrations
python manage.py migrate
第一条命令会根据models.py文件在项目的"App\migrations"目录中生成生成数据库迁移文件,第二条命令会根据上条命令生成的代码,在数据库中生成(或叫数据迁移)User、UserFields两个数据表,同时还会自动生成Django自已需要的一些辅助表
二、根据已有表格自动生成数据模型。
在项目manage.py所在目录命令行中执行下面命令
python manage.py inspectdb
该命令会根据连接的数据库中已有的数据表格,自动在models.py文件中生成模型代码,注意当表名为中文时,生成的代码class类名为空,需要手动添加中文名(与中文表名相同)。同时还需要添加“managed = False”语句,该语句的作用是在进行数据库迁移时,包含这个语句的模型不需要迁移,也就是告诉它不需要在数据库中对该表作修改。举例代码如下 :
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 = '作业区编码'
[size=150]这里例举了2种情况,第1种是新建数据模型(数据库中不存在同名表),第2种是数据库已经有表格了,需要根据已有表格自动生成数据模型。这里假设项目已经连接好了数据库,可进行下一步操作
一、新建数据模型。在models.py文件中根据Django规范建数据模型,如下举例代码[/size]
[Codebox=python file=Untitled.py]
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('字段设置', )
[/Codebox]
[size=150]模型文件编辑完后,在项目manage.py所在目录命令行中执行[/size]
[Codebox=dos file=Untitled.bat]
python manage.py makemigrations
python manage.py migrate
[/Codebox]
[size=150]
第一条命令会根据models.py文件在项目的"App\migrations"目录中生成生成数据库迁移文件,第二条命令会根据上条命令生成的代码,在数据库中生成(或叫数据迁移)User、UserFields两个数据表,同时还会自动生成Django自已需要的一些辅助表
二、根据已有表格自动生成数据模型。
在项目manage.py所在目录命令行中执行下面命令
[/size]
[Codebox=dos file=Untitled.bat]python manage.py inspectdb[/Codebox]
[size=150]该命令会根据连接的数据库中已有的数据表格,自动在models.py文件中生成模型代码,注意当表名为中文时,生成的代码class类名为空,需要手动添加中文名(与中文表名相同)。同时还需要添加“managed = False”语句,该语句的作用是在进行数据库迁移时,包含这个语句的模型不需要迁移,也就是告诉它不需要在数据库中对该表作修改。举例代码如下 :[/size]
[Codebox=python file=Untitled.py]
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 = '作业区编码'
[/Codebox]