#22512: Adding auto_now field to model causes migrate exception
---------------------------------+------------------------
     Reporter:  jaddison         |      Owner:  nobody
         Type:  Bug              |     Status:  new
    Component:  Migrations       |    Version:  1.7-beta-1
     Severity:  Release blocker  |   Keywords:
 Triage Stage:  Unreviewed       |  Has patch:  0
Easy pickings:  0                |      UI/UX:  0
---------------------------------+------------------------
 I have a feeling this bug has already been filed, but I couldn't (easily)
 find it.

 It looks like the makemigrations command is failing to import (or use) the
 datetime module properly. My steps:

 * On an existing model, add a DateTimeField with `auto_now=True` set
 * Run `makemigrations` command
 * Run `migrate` command

 Result is an exception, detailed below.

 Calling makemigrations:

 {{{
 (project1)jaddison@jamess-air-2:~/projects/project1 (master)$ ./manage.py
 makemigrations
 You are trying to add a non-nullable field 'updated' to contentlink
 without a default;
 we can't do that (the database needs something to populate existing rows).
 Please select a fix:
  1) Provide a one-off default now (will be set on all existing rows)
  2) Quit, and let me add a default in models.py
 Select an option: 1
 Please enter the default value now, as valid Python
 The datetime module is available, so you can do e.g. datetime.date.today()
 >>> datetime.datetime.now()
 Migrations for 'content':
   0003_contentlink_updated.py:
     - Add field updated to contentlink
 }}}

 Calling migrate:

 {{{
 (project1)jaddison@jamess-air-2:~/projects/project1 (master)$ ./manage.py
 migrate
 Traceback (most recent call last):
   File "./manage.py", line 10, in <module>
     execute_from_command_line(sys.argv)
   File "/Users/jaddison/.virtualenvs/project1/lib/python2.7/site-
 packages/django/core/management/__init__.py", line 427, in
 execute_from_command_line
     utility.execute()
   File "/Users/jaddison/.virtualenvs/project1/lib/python2.7/site-
 packages/django/core/management/__init__.py", line 419, in execute
     self.fetch_command(subcommand).run_from_argv(self.argv)
   File "/Users/jaddison/.virtualenvs/project1/lib/python2.7/site-
 packages/django/core/management/base.py", line 288, in run_from_argv
     self.execute(*args, **options.__dict__)
   File "/Users/jaddison/.virtualenvs/project1/lib/python2.7/site-
 packages/django/core/management/base.py", line 337, in execute
     output = self.handle(*args, **options)
   File "/Users/jaddison/.virtualenvs/project1/lib/python2.7/site-
 packages/django/core/management/commands/migrate.py", line 62, in handle
     executor = MigrationExecutor(connection,
 self.migration_progress_callback)
   File "/Users/jaddison/.virtualenvs/project1/lib/python2.7/site-
 packages/django/db/migrations/executor.py", line 14, in __init__
     self.loader = MigrationLoader(self.connection)
   File "/Users/jaddison/.virtualenvs/project1/lib/python2.7/site-
 packages/django/db/migrations/loader.py", line 48, in __init__
     self.build_graph()
   File "/Users/jaddison/.virtualenvs/project1/lib/python2.7/site-
 packages/django/db/migrations/loader.py", line 145, in build_graph
     self.load_disk()
   File "/Users/jaddison/.virtualenvs/project1/lib/python2.7/site-
 packages/django/db/migrations/loader.py", line 103, in load_disk
     migration_module = import_module("%s.%s" % (module_name,
 migration_name))
   File
 
"/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py",
 line 37, in import_module
     __import__(name)
   File
 
"/Users/jaddison/projects/project1/content/migrations/0003_contentlink_updated.py",
 line 6, in <module>
     class Migration(migrations.Migration):
   File
 
"/Users/jaddison/projects/project1/content/migrations/0003_contentlink_updated.py",
 line 16, in Migration
     field=models.DateTimeField(default=datetime(2014, 4, 25, 4, 32, 56,
 89929), auto_now=True),
 TypeError: 'module' object is not callable
 }}}

 The contents of the generated migration `0003_contentlink_updated.py`:

 {{{
 # encoding: utf8
 from django.db import models, migrations
 import datetime


 class Migration(migrations.Migration):

     dependencies = [
         ('content', '0002_contentlink_body'),
     ]

     operations = [
         migrations.AddField(
             model_name='contentlink',
             name='updated',
             field=models.DateTimeField(default=datetime(2014, 4, 25, 4,
 32, 56, 89929), auto_now=True),
             preserve_default=False,
         ),
     ]
 }}}

 Note that it should be `default=datetime.datetime(2014, 4, 25, 4, 32, 56,
 89929)` instead.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/22512>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/051.0c712ffb23866d74068e72c94bf9a1f6%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to