Django models文件模型变更错误解决

表结构的修改

1、表结构修改后,原来表中已存在的数据,就会出现结构混乱,makemigrations更新表的时候就会出错

比如第一次建模型,漏了一个字段,后来补上了。(经常遇到模型字段修改)

重新makemigrations,然后报错

数据库规则:除了新建表,如果你再次增加字段,数据库会有一些自动检测的东西(比如有没有默认值,是否允许为空)

如果表中已经有数据,这个字段还是非空的,且没有设定默认值,后台检测不通过就会报错。

解决方法(有两种):

1、新增加的字段,设置允许为空。生成表的时候,之前数据新增加的字段就会为空。(null=True允许数据库中为空,blank=True允许admin后台中为空)

2、新增加的字段,设置一个默认值。生成表的时候,之前的数据新增加字段就会应用这个默认值(default=None,默认值为空)

删除0001_initial.py,再次makemigrations

接着再往数据库推送,python3 manage.py migrate

原来是自己在数据库手动添加过,不是通过django方式的。

于是手贱想删除表,删了再次执行,发现没有变化

删表有风险,可能误删其他表,如果表不多,所以还是新建一个库,环境干净(强迫症啊)

最后完美解决

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Django models filter筛选条件详解

    条件选取querySet的时候,filter表示=,exclude表示!=. querySet.distinct() 去重复 __exact 精确等于 like 'aaa' __iexact 精确等于 忽略大小写 ilike 'aaa' __contains 包含 like '%aaa%' __icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains. __gt 大于 __gte 大于等于 __lt 小于 __

  • Django对models里的objects的使用详解

    首先我们先熟悉下objects的大致概念. object是模型属性---用于模型对象和数据库交互 . objects = Manager() 是管理器类型的对象 ,是Model和数据库进行查询的接口. objects : 管理器对象 是Manager类型的对象,定义在from django.db import models中 用于模型对象和数据库交互 是默认自动生成的属性,但是可以自定义管理器对象 实例: class Students(models.Model): # stuobj = mode

  • 关于Django Models CharField 参数说明

    如下所示: depot_name = models.CharField( u'设备库房名称', blank=True, max_length=20, null=True, # default='', help_text='显示在下方吗', ) 在这里u'设备库房名称',是将depot_name这个英文名重写,blank=True是允许表单验证为空,null=True是允许数据库这个值为空, help_text是提示信息v在这里u'设备库房名称',是将depot_name这个英文名重写,blank

  • Django获取应用下的所有models的例子

    Django获取应用下的所有models from django.apps import apps apps.get_models() # 获取所有的models,包含Django自带的 apps.get_app_config('blog') # 获取blog的配置 # <BlogConfig: blog> apps.get_app_config('blog').models # OrderedDict([('tag', <class 'app_blog.blog.models.Tag'

  • django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】

    本文实例讲述了django框架使用views.py函数对表进行增删改查内容操作.分享给大家供大家参考,具体如下: models之对于表的创建有以下几种: 一对一:ForeignKey("Author",unique=True),  OneToOneField("Author") 一对多:ForeignKey(to="Publish",to_field="id",on_delete.CASCADE) 多对多:ManyToMany

  • Django shell调试models输出的SQL语句方法

    在settings.py里,配置如下logging: LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True,

  • python Django中models进行模糊查询的示例

    多个字段模糊查询, 括号中的下划线是双下划线,双下划线前是字段名,双下划线后可以是icontains或contains,区别是是否大小写敏感,竖线是或的意思 #搜索功能 @csrf_exempt#使用@csrf_exempt装饰器,免除csrf验证 def search_testCaseApi(request): if request.method == 'POST': name = request.POST.get('task_name') updateUser=request.POST.ge

  • Django 模型类(models.py)的定义详解

    一. #在models.py中添加 #代码如下 from django.db import models #出版商 class Publisher(models.Model): name=models.CharField(max_length=30) address=models.CharField(max_length=50) city=models.CharField(max_length=60) state_province=models.CharField(max_length=30)

  • Django models文件模型变更错误解决

    表结构的修改 1.表结构修改后,原来表中已存在的数据,就会出现结构混乱,makemigrations更新表的时候就会出错 比如第一次建模型,漏了一个字段,后来补上了.(经常遇到模型字段修改) 重新makemigrations,然后报错 数据库规则:除了新建表,如果你再次增加字段,数据库会有一些自动检测的东西(比如有没有默认值,是否允许为空) 如果表中已经有数据,这个字段还是非空的,且没有设定默认值,后台检测不通过就会报错. 解决方法(有两种): 1.新增加的字段,设置允许为空.生成表的时候,之前

  • IIS 运行ASP文件500内部错误解决方法大全

    1 IIS服务器出现500错误 2错误原因:500错误的原因一般是源程序出现错误造成的. 3 解决办法:1 首先设置IE浏览器à工具->Internet选项 2 刷新或者重新打开500错误页面就会出现错误的程序部分 3 根据错误提示,然后解决问题. 4 ADODB.Connection 创建失败的可能解决方法: 1.重装MDAC2.8. MDAC 2.8下载地址: http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&am

  • 执行Django数据迁移时报 1091错误及解决方法

    问题描述 今天在Pycharm 中的Terminal下,执行数据迁移操作时,第一步: Python manage.py makemigrations ,是没有任何问题,但就是在执行真正的数据迁移时,也就是第二步:Python manage.py migrate 时,报错,错误截图如下 大概的意思就是   错误代码1091,原因是  "无法删除'dt_id':请检查列/键是否存在". 问题的解决 分析: 可能是数据库中的字段结构,已经完成了对此字段的修改,但是在执行数据迁移的时候,生成的

  • 解决python删除文件的权限错误问题

    使用os.remove删除文件,总是遇到错误:PermissionError: WinError 找了很久没找到什么原因,以为是windows系统的问题,最后发现是删除了一个没有关闭的文件引起的. 代码如下: with open(front_pic_path,'rb') as f: pic_base64 = base64.b64encode(f.read()) #f.close() os.remove(front_pic_path) 后来我增加了那行f.close()就OK啦! 以上这篇解决py

  • django迁移文件migrations的实现

    当模型models.py中发生改变时,即在models.py文件操作数据表,使得数据库中的表结构发生变化,需要使用命令,记录这些操作,类似于日记. 修改完models.py后,先在Terminal下执行命令 python manage.py makemigrations 这是仅仅是生成迁移记录,执行过后,数据库中的表并未发生变化.若是models发生改变,但是执行以上命令,显示的是 No changes detected 则需要执行 python manage.py makemigrations

  • Django 重写用户模型的实现

    Django内建的User模型可能不适合某些类型的项目.例如,在某些网站上使用邮件地址而不是用户名作为身份的标识可能更合理. 1.修改配置文件,覆盖默认的User模型 Django允许你通过修改setting.py文件中的 AUTH_USER_MODEL 设置覆盖默认的User模型,其值引用一个自定义的模型. AUTH_USER_MODEL = 'myapp.MyUser' 上面的值表示Django应用的名称(必须位于INSTALLLED_APPS中)和你想使用的User模型的名称. 注意: 1

  • 对django的User模型和四种扩展/重写方法小结

    User模型 User模型是这个框架的核心部分.他的完整的路径是在django.contrib.auth.models.User.以下对这个User对象做一个简单了解: 字段: 内置的User模型拥有以下的字段: username: 用户名.150个字符以内.可以包含数字和英文字符,以及_.@.+..和-字符.不能为空,且必须唯一! first_name:歪果仁的first_name,在30个字符以内.可以为空. last_name:歪果仁的last_name,在150个字符以内.可以为空. e

  • 浅谈Django QuerySet对象(模型.objects)的常用方法

    准备工作: 新建一个项目,在项目中新家一个app,名字自取.将app添加值settings.py中,然后配置settings连接数据库. 在app中的models中新建模型: from django.db import models # Create your models here. class Author(models.Model): """作者模型""" name = models.CharField(max_length=100) ag

  • 在脚本中单独使用django的ORM模型详解

    有时候在测试django中一些模块时,不想重新跑一整个django项目,只想跑单个文件,正好写在if __name__ == '__main__': 这样也不会打扰到正常的代码逻辑 方法 正常方法 大家都知道的方法就是'python manage.py shell',当然我知道这可能不是你需要的: 更好用的方法 在脚本中import模型前调用下面几行即可: import os, sys BASE_DIR = os.path.dirname(os.path.abspath(__file__)) #

  • Django自定义User模型、认证、权限控制的操作

    Django自带强大的User系统,为我们提供用户认证.权限.组等一系列功能,可以快速建立一个完整的后台功能. 但User模型并不能满足我们的需求,例如自带的User表中没有手机号码,而且对于国人来说表中的first_name和last_name并没有什么卵用,对于实际生产中灵活的用户表来说重写User模型是非常有必要的. 扩展User模型 扩展User模型有许多的方法: 1.Proxy继承: 代理继承,此方法只能够继承User本身拥有的字段,并不能够添加和删改,不会影响表中原有的结构,但是可以

随机推荐