Opened 17 months ago
Closed 17 months ago
#35509 closed Bug (invalid)
migration models.BooleanField(default=False) does not create a DEFAULT attribte on mysql table
| Reported by: | Daniel Ahern | Owned by: | nobody |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 5.0 |
| Severity: | Normal | Keywords: | |
| Cc: | Daniel Ahern | Triage Stage: | Unreviewed |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Python 3.12.0
Django 5.0.6
MariaDB/MySQL 8.0.30-0ubuntu0.22.04.1 (Ubuntu)
models.py:
from django.db import models
class TableBoolean(models.Model):
field1 = models.BooleanField(default=False)
class Meta:
db_table = 'test_boolean'
Then I do:
python manage.py makemigrations v506
which makes:
# Generated by Django 5.0.6 on 2024-06-08 14:03
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='TableBoolean',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('field1', models.BooleanField(default=False)),
],
options={
'db_table': 'test_boolean',
},
),
]
Running the migration creates a table that does NOT have a default value:
mysql> describe test_boolean; +--------+------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+------------+------+-----+---------+----------------+ | id | bigint | NO | PRI | NULL | auto_increment | | field1 | tinyint(1) | NO | | NULL | | +--------+------------+------+-----+---------+----------------+
I am able to alter the table:
mysql> alter table test_boolean modify field1 boolean default 0; Query OK, 0 rows affected (0.07 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> describe test_boolean; +--------+------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+------------+------+-----+---------+----------------+ | id | bigint | NO | PRI | NULL | auto_increment | | field1 | tinyint(1) | YES | | 0 | | +--------+------------+------+-----+---------+----------------+
Change History (2)
comment:1 by , 17 months ago
| Summary: | migration models.BooleanField(default=False) does not create a → migration models.BooleanField(default=False) does not create a DEFAULT attribte on mysql table |
|---|---|
| Type: | Uncategorized → Bug |
comment:2 by , 17 months ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
As documented: The default value can also be set at the database level with Field.db_default.