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)