mirror of https://github.com/django/django.git
Fixed #29505 -- Removed SchemaEditor's calling of callable defaults.
Thanks Eugene Pakhomov for the suggested fix.
This commit is contained in:
parent
0cf85e6b07
commit
e62f6e0968
|
@ -212,16 +212,13 @@ class BaseDatabaseSchemaEditor:
|
|||
default = datetime.now()
|
||||
internal_type = field.get_internal_type()
|
||||
if internal_type == 'DateField':
|
||||
default = default.date
|
||||
default = default.date()
|
||||
elif internal_type == 'TimeField':
|
||||
default = default.time
|
||||
default = default.time()
|
||||
elif internal_type == 'DateTimeField':
|
||||
default = timezone.now
|
||||
default = timezone.now()
|
||||
else:
|
||||
default = None
|
||||
# If it's a callable, call it
|
||||
if callable(default):
|
||||
default = default()
|
||||
# Convert the value so it can be sent to the database.
|
||||
return field.get_db_prep_save(default, self.connection)
|
||||
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
from django.db import connection, models
|
||||
from django.test import TestCase
|
||||
|
||||
|
||||
class SchemaEditorTests(TestCase):
|
||||
|
||||
def test_effective_default_callable(self):
|
||||
"""SchemaEditor.effective_default() shouldn't call callable defaults."""
|
||||
class MyStr(str):
|
||||
def __call__(self):
|
||||
return self
|
||||
|
||||
class MyCharField(models.CharField):
|
||||
def _get_default(self):
|
||||
return self.default
|
||||
|
||||
def get_db_prep_save(self, default, connection):
|
||||
return default
|
||||
|
||||
field = MyCharField(max_length=1, default=MyStr)
|
||||
with connection.schema_editor() as editor:
|
||||
self.assertEqual(editor.effective_default(field), MyStr)
|
Loading…
Reference in New Issue