django models实际操作中遇到的一些问题
Posted 每天1990
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django models实际操作中遇到的一些问题相关的知识,希望对你有一定的参考价值。
问题1.将主键id改成自动生成的python3 manage.py migrate时报下面的错误
django.db.utils.InternalError: (1091, "Can‘t DROP ‘id‘; check that column/key exists")
我猜测是因为我改了两个表的主键,其中A表主键是B表的外键,删除会有问题
解决方法:
1.删除app下migrations文件夹中000开头的记录文件
2.删掉app对应的数据库drop database 数据库名;
4.重新建立刚刚删除的数据库create database 数据库名;
3.然后重新执行修改数据库的命令:
python3 manage.py makemigrations
python3 manage.py migrate
问题2:django向数据库中添加中文时报错
django.db.utils.InternalError: (1366, "Incorrect string value: ‘\\xE7\\x99\\xBB\\xE5\\xBD\\x95...‘ for column ‘chinessname‘ at row 1")
解决方法:创建数据库的时候设置编码格式
CREATE DATABASE 数据库名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
问题3:增加主键没生效,每次都只是执行了update
django的models通过AutoField设置自增主键后,没有递增,代码如下
class elements(models.Model):
elementid=models.AutoField(primary_key=True,default=1)
elementid=models.AutoField(primary_key=True,default=1)
pageid=models.ForeignKey(page)
解决方法:去掉default=1
如果有default,它实现的是update,只有去掉default,才执行insert
问题4:models存储包含外键的数据时,报错
ValueError: Cannot assign "‘12‘": "elements.pageid" must be a "page" instance.
models的数据结构:
class page(models.Model):
pageid=models.AutoField(primary_key=True)
pageid=models.AutoField(primary_key=True)
class elements(models.Model):
elementid=models.AutoField(primary_key=True)
elementid=models.AutoField(primary_key=True)
pageid=models.ForeignKey(page)
解决方法:
page对象的paged是elements的外键,在使用save时,需要传递一个page对象实例
elements(pageid=page.objects.get(pageid=xxx).save()
以上是关于django models实际操作中遇到的一些问题的主要内容,如果未能解决你的问题,请参考以下文章