• Django 做migrations时出错,解决方案


    在做migrations的时候,偶尔会出现出错。


    在已有数据的表中新增字段时,会弹出下面的信息

    比如

    # models.py 文件里
    
    class User(models.Model):
        """
        用户表
        """
        name = models.CharField(verbose_name="姓名", max_length=32)
        mobile = models.CharField(verbose_name="手机号", max_length=11)
        email = models.EmailField(verbose_name="邮箱", max_length=128)
        gender = models.SmallIntegerField(verbose_name="性别", choices=((1, "男"), (2, "女")))
        depart = models.ForeignKey(verbose_name="所属部门", to="Department", to_field="id", on_delete=models.CASCADE)
    
    	# 添加一个新列
    	age = models.IntegerField(verbose_name="年龄")
    
    

    运行这个命令时

    python manage.py makemigrations
    

    会出现下面的情况:因为当新的field创建时,Django 会考虑到原先已创建的表里是有数据的,为了不影响现有的数据,Django会让你提供default value给新的列
    请添加图片描述

    第一种解决方案
    请添加图片描述

    之后执行命令行

    python manage.py migrate
    

    第二种解决方案
    在创建一个model的时候,直接附上 default 的值

    # models.py 
    
    class User(models.Model):
        """
        用户表
        """
        name = models.CharField(verbose_name="姓名", max_length=32)
        mobile = models.CharField(verbose_name="手机号", max_length=11)
        email = models.EmailField(verbose_name="邮箱", max_length=128)
        gender = models.SmallIntegerField(verbose_name="性别", choices=((1, "男"), (2, "女")))
        depart = models.ForeignKey(verbose_name="所属部门", to="Department", to_field="id", on_delete=models.CASCADE)
    
    	# 新增加的列
    	age2 = models.IntegerField(verbose_name="年龄", default=1)
    
    

    直接运行下面的命令行就可以添加了:

    python manage.py makemigrations
    
    python manage.py migrate
    

    migrate 无法生成表

    运行这个命令时

    python manage.py migrate
    

    会出现这种结果

    Operations to perform:
      Apply all migrations: admin, app01, auth, contenttypes, sessions
    Running migrations:
      No migrations to apply.
    

    出现无法生成表的原因是,去到 django_migrations 表里查看,就能知道之前已经创建了表。所以得在该表用sql语句来删除对应的app数据。
    请添加图片描述
    最后运行下面两个命令

    python manage.py makemigrations
    
    python manage.py migrate
    

    这样就可以创建表了。


    点个赞呗~

  • 相关阅读:
    springboot基于itextpdf将html生成pdf
    关于sqlModel 实现查询表单入参空值和模糊匹配一次性查询
    超标量处理器设计 姚永斌 第10章 指令提交 摘录
    WPF + Winform 解决管理员权限下无法拖放文件的问题
    Java学习【深入解读File类:从基础到高级的完整指南】
    手机快充协议
    电动车企的2023:抱团活下去
    带宽、采样率、存储深度的理解
    MyBatis-3.4.2 源码学习
    文档查重,论文查重,相似度算法,pdf文档操作
  • 原文地址:https://blog.csdn.net/BSCHN123/article/details/139307178