From 0949df014b7f686f7e2b705fdcc6a556dd11bf51 Mon Sep 17 00:00:00 2001 From: rma4ok Date: Wed, 29 Apr 2015 01:14:48 -0400 Subject: [PATCH 1/3] [fix] SortedListField: update whole list if order is changed --- mongoengine/base/document.py | 7 +++++++ tests/fields/fields.py | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/mongoengine/base/document.py b/mongoengine/base/document.py index d31d75ba..3eba16ca 100644 --- a/mongoengine/base/document.py +++ b/mongoengine/base/document.py @@ -547,6 +547,7 @@ class BaseDocument(object): EmbeddedDocument = _import_class("EmbeddedDocument") DynamicEmbeddedDocument = _import_class("DynamicEmbeddedDocument") ReferenceField = _import_class("ReferenceField") + SortedListField = _import_class("SortedListField") changed_fields = [] changed_fields += getattr(self, '_changed_fields', []) @@ -577,6 +578,12 @@ class BaseDocument(object): if (hasattr(field, 'field') and isinstance(field.field, ReferenceField)): continue + elif (isinstance(field, SortedListField) and field._ordering): + # if ordering is affected whole list is changed + if any(map(lambda d: field._ordering in d._changed_fields, data)): + changed_fields.append(db_field_name) + continue + self._nestable_types_changed_fields( changed_fields, key, data, inspected) return changed_fields diff --git a/tests/fields/fields.py b/tests/fields/fields.py index c2967856..7a99bd78 100644 --- a/tests/fields/fields.py +++ b/tests/fields/fields.py @@ -916,6 +916,13 @@ class FieldTest(unittest.TestCase): self.assertEqual(post.comments[0].content, comment2.content) self.assertEqual(post.comments[1].content, comment1.content) + post.comments[0].order = 2 + post.save() + post.reload() + + self.assertEqual(post.comments[0].content, comment1.content) + self.assertEqual(post.comments[1].content, comment2.content) + BlogPost.drop_collection() def test_reverse_list_sorting(self): From 43a5df87807d138d7b6c4b97a3059ab3c996057b Mon Sep 17 00:00:00 2001 From: rma4ok Date: Wed, 29 Apr 2015 11:23:51 -0400 Subject: [PATCH 2/3] [dist] Adding rma4ok to contributors --- AUTHORS | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS b/AUTHORS index 9d105a60..6745e14b 100644 --- a/AUTHORS +++ b/AUTHORS @@ -220,3 +220,4 @@ that much better: * Michael Chase (https://github.com/rxsegrxup) * Eremeev Danil (https://github.com/elephanter) * Catstyle Lee (https://github.com/Catstyle) + * Kiryl Yermakou (https://github.com/rma4ok) From 0ee3203a5a6d3ac1ed43575e2ac4334578000b8b Mon Sep 17 00:00:00 2001 From: rma4ok Date: Wed, 29 Apr 2015 11:34:04 -0400 Subject: [PATCH 3/3] [docs] Adding SortedListField fix to changelog --- docs/changelog.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index f4b5ec6c..a27db5a4 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -15,6 +15,7 @@ Changes in 0.9.X - DEV - Fixed storage of microseconds in ComplexDateTimeField and unused separator option. #910 - Django support was removed and will be available as a separate extension. #958 - Don't send a "cls" option to ensureIndex (related to https://jira.mongodb.org/browse/SERVER-769) +- Fix for updating sorting in SortedListField. #978 Changes in 0.9.0 ================