Opened 10 years ago

Closed 10 years ago

Last modified 10 years ago

#26239 closed Cleanup/optimization (fixed)

Document auto_now behavior with QuerySet.update()

Reported by: Ahmed Saidi Owned by: Duane Hilton
Component: Documentation Version: 1.8
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: yes UI/UX: no

Description

I don't know if this is a bug or not, but when using update(), the DateTime fields with auto_now are not updated to the current time. The documentation of auto_now doesn't say anything about that situation.
For example:

#  This won't update `updated_at`:
Order.objects.filter(user_id=7).update(check_count=3)

# You have to explicitly include it in update()
Order.objects.filter(user_id=7).update(check_count=3, updated_at=timezone.now())

Change History (11)

comment:1 by Tim Graham, 10 years ago

Easy pickings: set
Triage Stage: UnreviewedAccepted
Type: UncategorizedCleanup/optimization

in reply to:  description ; comment:2 by AMaini503, 10 years ago

I will try to work on this. But should update be modified to include timestamp by itself or documentation should be altered to state that timestamp needs to be passed explicitly ?

Last edited 10 years ago by Tim Graham (previous) (diff)

in reply to:  2 comment:3 by honsdomi, 10 years ago

Hello, can someone confirm if this requires modifying code or just documentation?

Last edited 10 years ago by Tim Graham (previous) (diff)

comment:4 by Ahmed Saidi, 10 years ago

Hi, Sorry for delay in replay.
I think documentation change is better, so existing applications won't have to do any changes to upgrade.
As i understand now, you must call save() for the auto-update field to be populated, which is fine, but explicitly mentioning that in the documentation good for new users (like me).
Thank you.

comment:5 by Duane Hilton, 10 years ago

Owner: changed from nobody to Duane Hilton
Status: newassigned

in reply to:  4 ; comment:6 by Duane Hilton, 10 years ago

Replying to boussouira:
I think the documentation already specifies this: "Automatically set the field to now every time the object is saved."
https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.DateField.auto_now

Does the documentation need something more?

Hi, Sorry for delay in replay.
I think documentation change is better, so existing applications won't have to do any changes to upgrade.
As i understand now, you must call save() for the auto-update field to be populated, which is fine, but explicitly mentioning that in the documentation good for new users (like me).
Thank you.

Version 0, edited 10 years ago by Duane Hilton (next)

in reply to:  6 comment:7 by Ahmed Saidi, 10 years ago

I think that is good enough.
Thank you

Last edited 10 years ago by Tim Graham (previous) (diff)

comment:8 by Tim Graham, 10 years ago

How about adding something like, "The field is not updated when using QuerySet.update() to update other fields."

in reply to:  8 comment:9 by Duane Hilton, 10 years ago

Okay, I added a note to that effect. https://github.com/django/django/pull/6281

comment:10 by Tim Graham <timograham@…>, 10 years ago

Resolution: fixed
Status: assignedclosed

In ca5c05d:

Fixed #26239 -- Added a note about how auto_now works with QuerySet.update().

comment:11 by Tim Graham <timograham@…>, 10 years ago

In 421ad283:

[1.9.x] Fixed #26239 -- Added a note about how auto_now works with QuerySet.update().

Backport of ca5c05ddbe91f4aae38c4543240dbda5f1fb1db2 from master

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