Added update() convenience method to a document
Thanks to @dcrosta for the initial code [closes #229]
This commit is contained in:
parent
7a3412dc13
commit
a4c197a83c
@ -193,6 +193,18 @@ class Document(BaseDocument):
|
|||||||
reset_changed_fields(self)
|
reset_changed_fields(self)
|
||||||
signals.post_save.send(self.__class__, document=self, created=created)
|
signals.post_save.send(self.__class__, document=self, created=created)
|
||||||
|
|
||||||
|
def update(self, **kwargs):
|
||||||
|
"""Performs an update on the :class:`~mongoengine.Document`
|
||||||
|
A convenience wrapper to :meth:`~mongoengine.QuerySet.update`.
|
||||||
|
|
||||||
|
Raises :class:`OperationError` if called on an object that has not yet
|
||||||
|
been saved.
|
||||||
|
"""
|
||||||
|
if not self.pk:
|
||||||
|
raise OperationError('attempt to update a document not yet saved')
|
||||||
|
|
||||||
|
return self.__class__.objects(pk=self.pk).update_one(**kwargs)
|
||||||
|
|
||||||
def delete(self, safe=False):
|
def delete(self, safe=False):
|
||||||
"""Delete the :class:`~mongoengine.Document` from the database. This
|
"""Delete the :class:`~mongoengine.Document` from the database. This
|
||||||
will only take effect if the document has been previously saved.
|
will only take effect if the document has been previously saved.
|
||||||
|
@ -1203,6 +1203,29 @@ class DocumentTest(unittest.TestCase):
|
|||||||
self.assertEqual(person.name, None)
|
self.assertEqual(person.name, None)
|
||||||
self.assertEqual(person.age, None)
|
self.assertEqual(person.age, None)
|
||||||
|
|
||||||
|
def test_document_update(self):
|
||||||
|
|
||||||
|
def update_not_saved_raises():
|
||||||
|
person = self.Person(name='dcrosta')
|
||||||
|
person.update(set__name='Dan Crosta')
|
||||||
|
|
||||||
|
self.assertRaises(OperationError, update_not_saved_raises)
|
||||||
|
|
||||||
|
author = self.Person(name='dcrosta')
|
||||||
|
author.save()
|
||||||
|
|
||||||
|
author.update(set__name='Dan Crosta')
|
||||||
|
author.reload()
|
||||||
|
|
||||||
|
p1 = self.Person.objects.first()
|
||||||
|
self.assertEquals(p1.name, author.name)
|
||||||
|
|
||||||
|
def update_no_value_raises():
|
||||||
|
person = self.Person.objects.first()
|
||||||
|
person.update()
|
||||||
|
|
||||||
|
self.assertRaises(OperationError, update_no_value_raises)
|
||||||
|
|
||||||
def test_embedded_update(self):
|
def test_embedded_update(self):
|
||||||
"""
|
"""
|
||||||
Test update on `EmbeddedDocumentField` fields
|
Test update on `EmbeddedDocumentField` fields
|
||||||
|
@ -242,7 +242,7 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
self.Person.objects(pk=author.pk).update({})
|
self.Person.objects(pk=author.pk).update({})
|
||||||
|
|
||||||
def update_one_raises():
|
def update_one_raises():
|
||||||
self.Person.objects(pk=author.pk).update({})
|
self.Person.objects(pk=author.pk).update_one({})
|
||||||
|
|
||||||
self.assertRaises(OperationError, update_raises)
|
self.assertRaises(OperationError, update_raises)
|
||||||
self.assertRaises(OperationError, update_one_raises)
|
self.assertRaises(OperationError, update_one_raises)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user