一:Django Model

创建model:

  1. 常规创建model
    1. 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,
          }
      }
    2. 在你的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'
  2. 现有数据库结构转成Django中的model

    1. python .\manage.py inspectdb > my_modela_app/models.py  自动生成的model可能和实际有出入,不过没关系,第一次迁移的时候解决

    2. python .\manage.py makemigrations   生成迁移文件

    3. python .\manage.py migrate  --fake  因为是转过来的model,正常迁移肯定会报错,而且我希望django认为这就是现有数据库的结果 ,所以第一次迁移就加--fake(数据库忽略此次migrate)

    4. 再以后的操作就和常规操作model orm的流程一样了

    5. 迁移的时候 在install_app中注册django_comment_migrate,会帮助我们把model中的字段注释安排到mysql表中

猜你喜欢

转载自blog.csdn.net/xiaofeixia666888/article/details/127053313