parent
7a1b110f62
commit
b58bf3e0ce
@ -2,6 +2,10 @@
|
|||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
Changes in 0.6.14
|
||||||
|
=================
|
||||||
|
- Added support for add_to_set and each
|
||||||
|
|
||||||
Changes in 0.6.13
|
Changes in 0.6.13
|
||||||
================
|
================
|
||||||
- Fixed EmbeddedDocument db_field validation issue
|
- Fixed EmbeddedDocument db_field validation issue
|
||||||
|
@ -1387,11 +1387,16 @@ class QuerySet(object):
|
|||||||
# Convert value to proper value
|
# Convert value to proper value
|
||||||
field = cleaned_fields[-1]
|
field = cleaned_fields[-1]
|
||||||
|
|
||||||
if op in (None, 'set', 'push', 'pull', 'addToSet'):
|
if op in (None, 'set', 'push', 'pull'):
|
||||||
if field.required or value is not None:
|
if field.required or value is not None:
|
||||||
value = field.prepare_query_value(op, value)
|
value = field.prepare_query_value(op, value)
|
||||||
elif op in ('pushAll', 'pullAll'):
|
elif op in ('pushAll', 'pullAll'):
|
||||||
value = [field.prepare_query_value(op, v) for v in value]
|
value = [field.prepare_query_value(op, v) for v in value]
|
||||||
|
elif op == 'addToSet':
|
||||||
|
if isinstance(value, (list, tuple, set)):
|
||||||
|
value = [field.prepare_query_value(op, v) for v in value]
|
||||||
|
elif field.required or value is not None:
|
||||||
|
value = field.prepare_query_value(op, value)
|
||||||
|
|
||||||
key = '.'.join(parts)
|
key = '.'.join(parts)
|
||||||
|
|
||||||
@ -1407,6 +1412,8 @@ class QuerySet(object):
|
|||||||
parts.reverse()
|
parts.reverse()
|
||||||
for key in parts:
|
for key in parts:
|
||||||
value = {key: value}
|
value = {key: value}
|
||||||
|
elif op == 'addToSet' and isinstance(value, list):
|
||||||
|
value = {key: {"$each": value}}
|
||||||
else:
|
else:
|
||||||
value = {key: value}
|
value = {key: value}
|
||||||
key = '$' + op
|
key = '$' + op
|
||||||
|
@ -10,4 +10,4 @@ cover-html-dir = ../htmlcov
|
|||||||
cover-package = mongoengine
|
cover-package = mongoengine
|
||||||
cover-erase = 1
|
cover-erase = 1
|
||||||
where = tests
|
where = tests
|
||||||
#tests = test_bugfix.py
|
tests = test_bugfix.py
|
||||||
|
@ -1520,7 +1520,7 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
|
|
||||||
BlogPost.drop_collection()
|
BlogPost.drop_collection()
|
||||||
|
|
||||||
def test_update_push_and_pull(self):
|
def test_update_push_and_pull_add_to_set(self):
|
||||||
"""Ensure that the 'pull' update operation works correctly.
|
"""Ensure that the 'pull' update operation works correctly.
|
||||||
"""
|
"""
|
||||||
class BlogPost(Document):
|
class BlogPost(Document):
|
||||||
@ -1553,6 +1553,23 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
post.reload()
|
post.reload()
|
||||||
self.assertEqual(post.tags, ["code", "mongodb"])
|
self.assertEqual(post.tags, ["code", "mongodb"])
|
||||||
|
|
||||||
|
def test_add_to_set_each(self):
|
||||||
|
class Item(Document):
|
||||||
|
name = StringField(required=True)
|
||||||
|
description = StringField(max_length=50)
|
||||||
|
parents = ListField(ReferenceField('self'))
|
||||||
|
|
||||||
|
Item.drop_collection()
|
||||||
|
|
||||||
|
item = Item(name='test item').save()
|
||||||
|
parent_1 = Item(name='parent 1').save()
|
||||||
|
parent_2 = Item(name='parent 2').save()
|
||||||
|
|
||||||
|
item.update(add_to_set__parents=[parent_1, parent_2, parent_1])
|
||||||
|
item.reload()
|
||||||
|
|
||||||
|
self.assertEqual([parent_1, parent_2], item.parents)
|
||||||
|
|
||||||
def test_pull_nested(self):
|
def test_pull_nested(self):
|
||||||
|
|
||||||
class User(Document):
|
class User(Document):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user