Django迁移错误:字段'name'没有默认值

问题描述 投票:2回答:1

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

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

[每当我尝试使用最简单的设置创建新表(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')
mysql django debian mariadb django-migrations
1个回答
0
投票

[Django正在运行查询INSERT INTO django_content_type (app_label, model) VALUES ('infokom', 'sth')时出现错误,因为未指定列name

在早期版本的Django中,表name上有一列django_content_type,但在1.4到1.10之间被删除了。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.