Opened 9 years ago

Last modified 4 weeks ago

#27222 assigned New feature

Refresh fields that are expressions after Model.save()

Reported by: holvianssi Owned by: Simon Charette
Component: Database layer (models, ORM) Version: 1.10
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by holvianssi)

The use case is automatically fetching the value for expressions when saving to DB. For example:

> user = User.objects.create(username=Lower('Anssi'))
> user.username == 'anssi'
True

While the above feature can be simulated somewhat easily by calling refresh_from_db() after save, an in-built implementation has the ability to use RETURNING as an optimization. In addition, it seems that refreshing objects on save would be a nice default, though this might be a bit backwards incompatible in some cases.

According to the ticket's flags, the next step(s) to move this issue forward are:

  • For anyone except the patch author to review the patch using the patch review checklist and either mark the ticket as "Ready for checkin" if everything looks good, or leave comments for improvement and mark the ticket as "Patch needs improvement".

Change History (11)

comment:1 by holvianssi, 9 years ago

Description: modified (diff)

comment:2 by Tim Graham, 9 years ago

Summary: Refresh expressions on saveRefresh fields that are expressions after Model.save()
Triage Stage: UnreviewedAccepted

Does this also fix #23386? In that case, we might close this as a duplicate.

comment:3 by Simon Charette, 9 years ago

Has patch: set

comment:4 by Simon Charette, 9 years ago

This might also be related to #21454 or at least to the implementation proposed in it's PR as we should really be using RETURNING on backends that support it instead of performing a second SELECT to fetch the database generated fields.

comment:5 by holvianssi, 9 years ago

I'm hesitant to go with RETURNING implementation for the first patch. The select approach is really simple, and it will be needed in any case for some backends. The RETURNING approach on the other hand will be complex, and after all it's just an optimisation.

This should almost solve #21454 with a Default expression. This would need to be assigned manually to fields pre-save. Then full solution to #21454 would be adding a bit of API to do the pre-save assignments automatically.

And yes, I believe this solves #23386.

comment:6 by Tim Graham, 9 years ago

Patch needs improvement: set

Comments for improvement on the PR.

comment:7 by Tim Graham, 8 years ago

Patch needs improvement: unset

I update the PR per my comments.

comment:8 by Tim Graham, 8 years ago

Patch needs improvement: set

Simon still has concerns described on the pull request.

comment:9 by Simon Charette, 4 weeks ago

Owner: changed from nobody to Simon Charette
Status: newassigned

comment:10 by Simon Charette, 4 weeks ago

Updated patch that makes use of RETURNING on backends that support it and clear the attributes otherwise (allowing refresh_from_db to kick in on attribute access). Still needs a few tweaks.

comment:11 by Simon Charette, 4 weeks ago

Patch needs improvement: unset
Note: See TracTickets for help on using tickets.
Back to Top