Skip to content

Commit 00ff230

Browse files
committed
Implement fix for update_fields issue
1 parent 590c66a commit 00ff230

2 files changed

Lines changed: 16 additions & 0 deletions

File tree

morango/models/core.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -849,6 +849,13 @@ def save(self, update_dirty_bit_to=True, *args, **kwargs):
849849
self._morango_dirty_bit = True
850850
elif not update_dirty_bit_to:
851851
self._morango_dirty_bit = False
852+
853+
# ensure the dirty bit field is in the fields to update if present, to keep it in sync
854+
if update_dirty_bit_to is not None and kwargs.get("update_fields") is not None:
855+
kwargs["update_fields"] = set(kwargs["update_fields"]) | {
856+
"_morango_dirty_bit"
857+
}
858+
852859
super(SyncableModel, self).save(*args, **kwargs)
853860

854861
def delete(

tests/testapp/tests/integration/test_syncing_models.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,15 @@ def test_syncable_save_with_update_fields_persists_dirty_bit(self):
7676
user.save(update_fields=["username"])
7777
self.assertTrue(MyUser.objects.first()._morango_dirty_bit)
7878

79+
def test_syncable_save_with_update_fields_when_to_ignore_dirty_bit(self):
80+
user = MyUser.objects.first()
81+
user.save(update_dirty_bit_to=False)
82+
self.assertFalse(MyUser.objects.first()._morango_dirty_bit)
83+
84+
user.username = "updated-name"
85+
user.save(update_dirty_bit_to=None, update_fields=["username"])
86+
self.assertFalse(MyUser.objects.first()._morango_dirty_bit)
87+
7988
def test_syncing_objects_manager_with_custom_default_manager(self):
8089
"""Test that syncing_objects manager includes all objects even when default manager filters them out"""
8190
# Create some test objects

0 commit comments

Comments
 (0)