创建model:
- 常规创建model
-
setting.py文件中配置好数据库信息
# Database # https://docs.djangoproject.com/en/2.1/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': MYSQL_ADDRESS_PRO, 'PORT': '3306', 'NAME': 'db_name', 'USER': MYSQL_ACCOUND_PRO, 'PASSWORD': MYSQL_PASS_PRO, } }
-
在你的django-app中的models.py文件中新建模型
from django.db import models class ZkysBaseModel(models.Model): # 所有model都有的字段,基类 is_delete = models.BooleanField(default=False, db_index=True) c_time = models.DateTimeField(auto_now_add=True) u_time = models.DateTimeField(auto_now=True) # 类中在定义一个类就代表是配置,约定俗成都叫Meta class Meta: # 基表必须设置abstract,基表就是给普通Model类继承使用的,设置了abstract就不会完成数据库迁移完成建表 abstract = True class NotDeletedManager(models.Manager): """ @description :重写模型管理器的getqueryset方法,这样get请求就自动过滤掉is_delete为True 的字段了,sure,你可以可以定义你自己的规则。 --------- @param : ------- @Returns : ------- """ def get_queryset(self): return models.Manager.get_queryset(self).filter(is_delete=False) class BladeNumberTableModel(ZkysBaseModel): task_id = models.CharField(unique=True, max_length=50, blank=True, null=True) blade_one = models.CharField(max_length=255, default="", help_text='') blade_two = models.CharField(max_length=255, default="", help_text='') blade_three = models.CharField(max_length=255, default="", help_text='') # 添加逻辑外键,不改变mysql的表结构,但是可以用orm关联查询,db_constraint=False就是实现了这个功能 fault_type_code = models.ForeignKey(to='FaultTypeManage', to_field='fault_type_code', on_delete=models.SET_NULL, db_constraint=False, null=True, blank=True, db_column="fault_type_code") objects = NotDeletedManager() class Meta: managed = True db_table = 'blade_number_table'
-
-
现有数据库结构转成Django中的model
-
python .\manage.py inspectdb > my_modela_app/models.py 自动生成的model可能和实际有出入,不过没关系,第一次迁移的时候解决
-
python .\manage.py makemigrations 生成迁移文件
-
python .\manage.py migrate --fake 因为是转过来的model,正常迁移肯定会报错,而且我希望django认为这就是现有数据库的结果 ,所以第一次迁移就加--fake(数据库忽略此次migrate)
-
再以后的操作就和常规操作model orm的流程一样了
-
迁移的时候 在install_app中注册django_comment_migrate,会帮助我们把model中的字段注释安排到mysql表中
-