summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/backends/base/schema.py2
-rw-r--r--tests/schema/tests.py7
2 files changed, 7 insertions, 2 deletions
diff --git a/django/db/backends/base/schema.py b/django/db/backends/base/schema.py
index aae64e3be7..ce929fd4e4 100644
--- a/django/db/backends/base/schema.py
+++ b/django/db/backends/base/schema.py
@@ -420,7 +420,7 @@ class BaseDatabaseSchemaEditor(object):
self.execute(sql, params)
# Drop the default if we need to
# (Django usually does not use in-database defaults)
- if not self.skip_default(field) and field.default is not None:
+ if not self.skip_default(field) and self.effective_default(field) is not None:
sql = self.sql_alter_column % {
"table": self.quote_name(model._meta.db_table),
"changes": self.sql_alter_column_no_default % {
diff --git a/tests/schema/tests.py b/tests/schema/tests.py
index 5baba26e00..ef4d36a0df 100644
--- a/tests/schema/tests.py
+++ b/tests/schema/tests.py
@@ -21,6 +21,7 @@ from django.db.transaction import atomic
from django.test import (
TransactionTestCase, mock, skipIfDBFeature, skipUnlessDBFeature,
)
+from django.test.utils import CaptureQueriesContext
from django.utils.timezone import UTC
from .fields import (
@@ -347,8 +348,12 @@ class SchemaTests(TransactionTestCase):
# Add the new field
new_field = IntegerField(null=True)
new_field.set_attributes_from_name("age")
- with connection.schema_editor() as editor:
+ with CaptureQueriesContext(connection) as ctx, connection.schema_editor() as editor:
editor.add_field(Author, new_field)
+ drop_default_sql = editor.sql_alter_column_no_default % {
+ 'column': editor.quote_name(new_field.name),
+ }
+ self.assertFalse(any(drop_default_sql in query['sql'] for query in ctx.captured_queries))
# Ensure the field is right afterwards
columns = self.column_classes(Author)
self.assertEqual(columns['age'][0], "IntegerField")