#21785 closed Bug (fixed)
migrate fails on DateTimeField with auto_now AND auto_now_add set
| Reported by: | Gabe Jackson | Owned by: | Andrew Godwin |
|---|---|---|---|
| Component: | Migrations | Version: | dev |
| Severity: | Release blocker | Keywords: | migrations |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | yes | UI/UX: | no |
Description
migrate fails on DateTimeField(auto_now=True, auto_now_add=True):
Running migrations:
No migrations needed.
Traceback (most recent call last):
File "./manage.py", line 9, in <module>
execute_from_command_line(sys.argv)
File "/Users/gabejackson/venv/m/lib/python2.7/site-packages/django/core/management/__init__.py", line 427, in execute_from_command_line
utility.execute()
File "/Users/gabejackson/venv/m/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/gabejackson/venv/m/lib/python2.7/site-packages/django/core/management/base.py", line 244, in run_from_argv
self.execute(*args, **options.__dict__)
File "/Users/gabejackson/venv/m/lib/python2.7/site-packages/django/core/management/base.py", line 291, in execute
output = self.handle(*args, **options)
File "/Users/gabejackson/venv/m/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 138, in handle
ProjectState.from_apps(apps),
File "/Users/gabejackson/venv/m/lib/python2.7/site-packages/django/db/migrations/state.py", line 61, in from_apps
model_state = ModelState.from_model(model)
File "/Users/gabejackson/venv/m/lib/python2.7/site-packages/django/db/migrations/state.py", line 114, in from_model
name, path, args, kwargs = field.deconstruct()
File "/Users/gabejackson/venv/m/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 911, in deconstruct
del kwargs['editable']
KeyError: u'editable'
This is due to: django/db/models/fields/init.py doing this:
def deconstruct(self):
name, path, args, kwargs = super(DateField, self).deconstruct()
if self.auto_now:
kwargs['auto_now'] = True
del kwargs['editable']
del kwargs['blank']
if self.auto_now_add:
kwargs['auto_now_add'] = True
del kwargs['editable']
del kwargs['blank']
return name, path, args, kwargs
this should probably be:
def deconstruct(self):
name, path, args, kwargs = super(DateField, self).deconstruct()
if self.auto_now or self.auto_now_add:
del kwargs['editable']
del kwargs['blank']
if self.auto_now:
kwargs['auto_now'] = True
if self.auto_now_add:
kwargs['auto_now_add'] = True
return name, path, args, kwargs
Change History (5)
comment:1 by , 12 years ago
| Owner: | set to |
|---|---|
| Status: | new → assigned |
comment:2 by , 12 years ago
comment:3 by , 12 years ago
for my defense... this was an autocomplete mistake i made in pycharm. Of course it doesn't make sense to define both auto_now and auto_now_add, but this should be caught when initializing the field.
comment:4 by , 12 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
Note:
See TracTickets
for help on using tickets.
I think specifying both
auto_nowandauto_add_nowshould be disallowed instead. It doesn't make much sense sinceauto_add_nowis really just a case subset ofauto_now.