Updates with no operator should default to $set Fix #667
This commit is contained in:
parent
21818e71f5
commit
99e943c365
@ -525,6 +525,13 @@ modifier comes before the field, not after it::
|
||||
>>> post.tags
|
||||
['database', 'nosql']
|
||||
|
||||
.. note::
|
||||
|
||||
If no modifier operator is specified the default will be `set` the both following sentences are identical::
|
||||
|
||||
>>> BlogPost.objects(id=post.id).update(title='Example Post')
|
||||
>>> BlogPost.objects(id=post.id).update(set__title='Example Post')
|
||||
|
||||
.. note::
|
||||
|
||||
In version 0.5 the :meth:`~mongoengine.Document.save` runs atomic updates
|
||||
|
@ -164,6 +164,9 @@ def update(_doc_cls=None, **update):
|
||||
mongo_update.update(value)
|
||||
continue
|
||||
parts = key.split('__')
|
||||
# if there is no operator, default to "set"
|
||||
if len(parts) < 3 and parts[0] not in UPDATE_OPERATORS:
|
||||
parts.insert(0, 'set')
|
||||
# Check for an operator and transform to mongo-style if there is
|
||||
op = None
|
||||
if parts[0] in UPDATE_OPERATORS:
|
||||
|
@ -1074,11 +1074,13 @@ class InstanceTest(unittest.TestCase):
|
||||
|
||||
self.assertRaises(OperationError, update_no_value_raises)
|
||||
|
||||
def update_no_op_raises():
|
||||
def update_no_op_should_default_to_set():
|
||||
person = self.Person.objects.first()
|
||||
person.update(name="Dan")
|
||||
person.reload()
|
||||
return person.name
|
||||
|
||||
self.assertRaises(InvalidQueryError, update_no_op_raises)
|
||||
self.assertEqual("Dan", update_no_op_should_default_to_set())
|
||||
|
||||
def test_update_unique_field(self):
|
||||
class Doc(Document):
|
||||
|
Loading…
x
Reference in New Issue
Block a user