Opened 14 months ago

Last modified 12 months ago

#27222 new New feature

Refresh fields that are expressions after Model.save()

Reported by: holvianssi Owned by: nobody
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: yes
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.

Change History (8)

comment:1 Changed 14 months ago by holvianssi

Description: modified (diff)

comment:2 Changed 14 months ago by Tim Graham

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 Changed 14 months ago by Simon Charette

Has patch: set

comment:4 Changed 14 months ago by Simon Charette

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 Changed 14 months ago by holvianssi

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 Changed 14 months ago by Tim Graham

Patch needs improvement: set

Comments for improvement on the PR.

comment:7 Changed 12 months ago by Tim Graham

Patch needs improvement: unset

I update the PR per my comments.

comment:8 Changed 12 months ago by Tim Graham

Patch needs improvement: set

Simon still has concerns described on the pull request.

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