Fix bug #1965 of $position and $push operators do not work with list in an EmbeddedDocument. Set key value to joined parts excluding the index at the end. Added test case
This commit is contained in:
@@ -842,10 +842,16 @@ class InstanceTest(MongoDBTestCase):
|
||||
|
||||
@requires_mongodb_gte_26
|
||||
def test_modify_with_positional_push(self):
|
||||
class Content(EmbeddedDocument):
|
||||
keywords = ListField(StringField())
|
||||
|
||||
class BlogPost(Document):
|
||||
tags = ListField(StringField())
|
||||
content = EmbeddedDocumentField(Content)
|
||||
|
||||
post = BlogPost.objects.create(
|
||||
tags=['python'], content=Content(keywords=['ipsum']))
|
||||
|
||||
post = BlogPost.objects.create(tags=['python'])
|
||||
self.assertEqual(post.tags, ['python'])
|
||||
post.modify(push__tags__0=['code', 'mongo'])
|
||||
self.assertEqual(post.tags, ['code', 'mongo', 'python'])
|
||||
@@ -856,6 +862,16 @@ class InstanceTest(MongoDBTestCase):
|
||||
['code', 'mongo', 'python']
|
||||
)
|
||||
|
||||
self.assertEqual(post.content.keywords, ['ipsum'])
|
||||
post.modify(push__content__keywords__0=['lorem'])
|
||||
self.assertEqual(post.content.keywords, ['lorem', 'ipsum'])
|
||||
|
||||
# Assert same order of the list items is maintained in the db
|
||||
self.assertEqual(
|
||||
BlogPost._get_collection().find_one({'_id': post.pk})['content']['keywords'],
|
||||
['lorem', 'ipsum']
|
||||
)
|
||||
|
||||
def test_save(self):
|
||||
"""Ensure that a document may be saved in the database."""
|
||||
|
||||
|
Reference in New Issue
Block a user