#18306: Deferred models should automatically issue update_fields when saving
-------------------------------------+-------------------------------------
     Reporter:  akaariai             |                    Owner:  akaariai
         Type:                       |                   Status:  reopened
  Cleanup/optimization               |                  Version:  master
    Component:  Database layer       |               Resolution:
  (models, ORM)                      |             Triage Stage:  Ready for
     Severity:  Normal               |  checkin
     Keywords:                       |      Needs documentation:  0
    Has patch:  1                    |  Patch needs improvement:  0
  Needs tests:  0                    |                    UI/UX:  0
Easy pickings:  0                    |
-------------------------------------+-------------------------------------

Comment (by akaariai):

 The problem I faced was that there were multiple places in models/query.py
 where the deferred_fields would need to be calculated. The original
 implementation didn't take into account select_related (where
 get_cached_row() can return deferred instances), and qs.raw(). These just
 work with the current implementation. In addition, there is no additional
 state bookkeeping which is always a bonus. One less place for bugs to hide
 :)

 If one wants to do dirty field state tracking, the solution is to use the
 model instance itself or it's state to keep the dirty field info, and then
 just overrider the .save() method and use update_fields in there for the
 dirty fields.

 BTW I have been wondering if we should allow 'pk' in the update_fields. If
 you say `"update_fields=['pk']"`, then the primary key will be updated as
 part of the query. I know there is no cascade support in Django, but one
 can always use custom db schemas and ON UPDATE CASCADE. Seems useful to
 me. But of course not this ticket's problem...

-- 
Ticket URL: <https://code.djangoproject.com/ticket/18306#comment:20>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to