mysql 的 Django BooleanField 默认值

Posted

技术标签:

【中文标题】mysql 的 Django BooleanField 默认值【英文标题】:Django BooleanField default for mysql 【发布时间】:2015-05-05 15:07:03 【问题描述】:

我将 Django 1.7 与 mysql 一起使用。

我有一个想要添加 BooleanField 的现有模型。我希望该字段默认为 true。看起来很简单吧?所以我像这样创建我的领域:

class MyModel(models.Model):
    my_field = models.BooleanField(default=True)

然后我运行 makemigrations 并生成以下迁移:

operations = [
    migrations.AddField(
        model_name='mymodel',
        name='myfield',
        field=models.BooleanField(default=True),
        preserve_default=True,
    ),
]

看起来合法,但是当我应用迁移时,在我的数据库中创建的字段没有默认值,它看起来像这样:

my_field tinyint(1) NOT NULL,

现在,当我应用迁移时,现有记录的字段设置为 1,但我想要迁移创建一个默认为 true 或 1 的字段。我在这里缺少什么?谁能阐明我做错了什么?任何建议将不胜感激,非常感谢!

【问题讨论】:

在 MyModel 中创建新条目并保存时会发生什么?是否将 my_field 设置为 True? @joelgoldstick - 是的,但是我正在使用的代码库的性质并不总是使用 ORM(我们正在过渡到 Django,但仍有遗留代码),这就是我想要默认设置在 db 级别 所以,django 似乎在做正确的事情,但是遗留代码添加了不默认的新记录。抱歉,我想不出解决办法。也许运行一个 cron 作业来更新旧代码中的新记录? 【参考方案1】:

Django 从不设置数据库级别的默认值。如果您想在旧代码中支持默认值,可以在迁移中添加 RunSQL 操作,将默认值添加到数据库列。

【讨论】:

以上是关于mysql 的 Django BooleanField 默认值的主要内容,如果未能解决你的问题,请参考以下文章

python3使用Django框架连接mysql(python3+Django+MySQL+pymysql)

Django---Django连接Mysql数据库

django中怎么使用两个限定条件在mysql数据库中进行查询

django连接已有数据的mysql数据库

pycharm下的django怎么连接mysql数据库啊?

Django连接数据mysql