码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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
    

    这样就可以创建表了。


    点个赞呗~

  • 相关阅读:
    C#实现二叉排序树定义、插入、构造
    c++11~c++20 -08-位域的默认初始化
    Odoo:全球排名第一的免费开源PLM管理系统介绍
    DNSlog 注入简单笔记
    Pytorch总结六之 欠拟合和过拟合的解决方法
    第3.1章:StarRocks数据导入——Insert into 同步模式
    阿里8年测试经验,耗时一个月整理的40道自动化测试面试真题(附精准答案解析)足足手写2W字
    如何从 OpenVINO 的主分支构建 Python Wheel 包
    csrf跨站请求伪造,csrf相关的装饰器,auth认证模块,auth_user表切换,基于django中间件设计项目功能
    Nginx实现负载均衡
  • 原文地址:https://blog.csdn.net/BSCHN123/article/details/139307178
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号