summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrabakaran Kumaresshan <k_prabakaran@hotmail.com>2018-10-19 12:26:33 +0530
committerTim Graham <timograham@gmail.com>2018-10-23 10:05:24 -0400
commit10d82c85aa5f8bd6adff0db49798dd368455cdcf (patch)
tree76e2494c9d348e3ad5dac5fe5d40c15bc47986bb
parent136a900ef98a7b7261a124308c8c26370ff2d5e4 (diff)
Fixed #29831 -- Added validation for makemigrations --name.
-rw-r--r--django/core/management/commands/makemigrations.py2
-rw-r--r--docs/ref/django-admin.txt3
-rw-r--r--tests/migrations/test_commands.py5
3 files changed, 9 insertions, 1 deletions
diff --git a/django/core/management/commands/makemigrations.py b/django/core/management/commands/makemigrations.py
index ea90467d22..cdccb8e9b3 100644
--- a/django/core/management/commands/makemigrations.py
+++ b/django/core/management/commands/makemigrations.py
@@ -61,6 +61,8 @@ class Command(BaseCommand):
self.merge = options['merge']
self.empty = options['empty']
self.migration_name = options['name']
+ if self.migration_name and not self.migration_name.isidentifier():
+ raise CommandError('The migration name must be a valid Python identifier.')
check_changes = options['check_changes']
# Make sure the app they asked for exists
diff --git a/docs/ref/django-admin.txt b/docs/ref/django-admin.txt
index 168f476eeb..f7fa7777e6 100644
--- a/docs/ref/django-admin.txt
+++ b/docs/ref/django-admin.txt
@@ -756,7 +756,8 @@ Enables fixing of migration conflicts.
.. django-admin-option:: --name NAME, -n NAME
-Allows naming the generated migration(s) instead of using a generated name.
+Allows naming the generated migration(s) instead of using a generated name. The
+name must be a valid Python :ref:`identifier <python:identifiers>`.
.. django-admin-option:: --check
diff --git a/tests/migrations/test_commands.py b/tests/migrations/test_commands.py
index 33b85578af..816abea65a 100644
--- a/tests/migrations/test_commands.py
+++ b/tests/migrations/test_commands.py
@@ -1352,6 +1352,11 @@ class MakeMigrationsTests(MigrationTestBase):
self.assertIn("dependencies=[\n('migrations','0001_%s'),\n]" % migration_name_0001, content)
self.assertIn("operations=[\n]", content)
+ def test_makemigrations_with_invalid_custom_name(self):
+ msg = 'The migration name must be a valid Python identifier.'
+ with self.assertRaisesMessage(CommandError, msg):
+ call_command('makemigrations', 'migrations', '--name', 'invalid name', '--empty')
+
def test_makemigrations_check(self):
"""
makemigrations --check should exit with a non-zero status when