Opened 10 years ago

Closed 8 years ago

#1056 closed defect (fixed)

auto_now_add=True broken with ChangeManipulator

Reported by: GomoX <gomo@…> Owned by: nobody
Component: contrib.admin Version:
Severity: major Keywords:
Cc: gomo@… Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: UI/UX:

Description

This is from the current DateField definition (django/core/meta/fields.py):

def pre_save(self, value, add):
    if self.auto_now or (self.auto_now_add and add):
        return datetime.datetime.now()
    return value

When you modify an object that has this field using it's ChangeManipulator, the field gets set to "null" from the request, because the DateTime fields with auto_now_add=True or auto_now=True are not editable (line 387 of the same file).
An additional elif clause should be added to catch this problem, like this:

def pre_save(self, value, add):
    if self.auto_now or (self.auto_now_add and add):
        return datetime.datetime.now()
    elif self.auto_now_add:
        return the_current_value_from_the_db
    else:
        return value

I'm posting the ticket instead of a patch because I'm not sure how to get the current value from the DB from the field instance.

Change History (4)

comment:1 Changed 9 years ago by jacob

  • milestone set to Version 1.0

This will likely become moot since auto_now_add should go away...

comment:2 Changed 9 years ago by anonymous

  • milestone Version 1.0 deleted

Milestone Version 1.0 deleted

comment:3 Changed 8 years ago by Gary Wilson <gary.wilson@…>

  • Triage Stage changed from Unreviewed to Accepted

comment:4 Changed 8 years ago by Brian Rosner <brosner@…>

  • Resolution set to fixed
  • Status changed from new to closed

Correct me if I am wrong, but since the removal of auto_now_add this isn't a problem in trunk. Reopen if I am incorrect.

Note: See TracTickets for help on using tickets.
Back to Top