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

Posted

技术标签:

【中文标题】Django 迁移错误:字段“名称”没有默认值【英文标题】:Django migration error: Field 'name' doesn't have a default value 【发布时间】:2019-07-27 04:36:18 【问题描述】:

我有一个最近从 1.4.5 升级到 1.11.16 的 Django 应用程序。它在旧版本的 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')

【问题讨论】:

你尝试设置null=True吗? 是的,试过了。即使我尝试使用 blank=True 并设置默认值,例如 default='-' 。 什么我不明白,这个字段叫什么名字。我在新模型中没有名为 name 的列。 你见过this question吗? 不,不过谢谢,似乎很有用。 【参考方案1】:

当 Django 运行查询 INSERT INTO django_content_type (app_label, model) VALUES ('infokom', 'sth') 时出现错误,因为它没有指定列 name

在早期版本的 Django 中,django_content_type 表中有一个列 name,但它在 1.4 和 1.10 之间的某个时间被删除了。

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

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

【讨论】:

以上是关于Django 迁移错误:字段“名称”没有默认值的主要内容,如果未能解决你的问题,请参考以下文章

如何在Django中基于枚举为模型字段设置默认值?

使用查询数据库的默认字段函数迁移时出现 Django 错误

Django IntegrityError:没有默认值

SQLSTATE [HY000]:一般错误:1364 字段“名称”没有默认值

Django 模型字段可调用默认值不起作用

Django模型南0.7.6迁移问题:表中的任何更改与另一个字段的默认值百分比