@@ -476,17 +476,20 @@ def update_dependent(
476476 if updates :
477477 if not _is_recursive :
478478 resolver_start .send (sender = self )
479- with transaction .atomic (): # FIXME: place transaction only once in tree descent
480- pks_updated : Dict [Type [Model ], Set [Any ]] = {}
479+ with transaction .atomic ():
480+ pks_updated : Dict [Type [Model ], Set [Any ]] = {}
481+ for queryset , fields in updates :
482+ _pks = self .bulk_updater (queryset , fields , return_pks = True , querysize = querysize )
483+ if _pks :
484+ pks_updated [queryset .model ] = _pks
485+ if old :
486+ for model2 , data in old .items ():
487+ pks , fields = data
488+ queryset = model2 .objects .filter (pk__in = pks - pks_updated .get (model2 , set ()))
489+ self .bulk_updater (queryset , fields , querysize = querysize )
490+ else :
481491 for queryset , fields in updates :
482- _pks = self .bulk_updater (queryset , fields , return_pks = True , querysize = querysize )
483- if _pks :
484- pks_updated [queryset .model ] = _pks
485- if old :
486- for model2 , data in old .items ():
487- pks , fields = data
488- queryset = model2 .objects .filter (pk__in = pks - pks_updated .get (model2 , set ()))
489- self .bulk_updater (queryset , fields , querysize = querysize )
492+ self .bulk_updater (queryset , fields , return_pks = False , querysize = querysize )
490493 if not _is_recursive :
491494 resolver_exit .send (sender = self )
492495
0 commit comments