Django迁移错误:字段“名称”没有默认值

时间:2019-03-05 16:30:20

标签: mysql django debian mariadb django-migrations

我有一个Django应用程序,最近已从1.4.5升级到1.11.16。它运行在旧版本的debian linux上,该版本已重新安装,现在为9.6。最初,数据库是mysql(默认的debian安装),现在是mariadb(也是默认的安装)。

由于项目很小,因此基本上没有数据库优化,几乎所有内容都使用默认设置运行。在重新安装和升级之前,数据库已转储并稍后加载。最初它使用的是myisam表类型,但现在默认为innodb。

每当我尝试使用最简单的设置e创建一个新表(Django模型)时。 g。:

class Sth(models.Model):
    car = models.CharField(max_length=128)

我面临以下警告:

/home/user/.virtualenvs/prj/local/lib/python2.7/site-packages/django/db/backends/mysql/base.py:101: Warning: Field 'name' doesn't have a default value

返回self.cursor.execute(query,args)

。这是什么意思,为什么会出现?如果设置了严格模式,它甚至会变成错误。

该问题的解决方案是什么?知道debian系统的变化(mysql-> mariadb)和django升级(1.4.5-> 1.11.16)我应该怎么看?

我还尝试将当前表更改为innodb,还将默认mariadb类型更改为myisam,但这无济于事。


在运行迁移时,来自mysql日志的sql查询:

CREATE TABLE `infokom_sth` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `car` varchar(128) NULL)
INSERT INTO `django_migrations` (`app`, `name`, `applied`) VALUES ('infokom', '0004_sth', '2019-03-05 22:25:54.360285')
INSERT INTO `django_content_type` (`app_label`, `model`) VALUES ('infokom', 'sth')
INSERT INTO `auth_permission` (`name`, `content_type_id`, `codename`) VALUES ('Can add sth', 27, 'add_sth'), ('Can change sth', 27, 'change_sth'), ('Can delete sth', 27, 'delete_sth')

1 个答案:

答案 0 :(得分:0)

Django在运行查询ListT时出现错误,因为未指定列flatMap

在早期版本的Django中,表INSERT INTO django_content_type (app_label, model) VALUES ('infokom', 'sth')上有一列name,但在1.4到1.10之间被删除了。

迁移没有删除多余的列,因此您必须手动删除name

我在1.10上遇到相同的错误,然后删除了django_content_type,然后迁移对我来说很好。