Better BaseDocument equality check when not saved
When 2 instances of a Document had id = None they would be considered equal unless an __eq__ were implemented. We now return False for such case. It now behaves more similar to Django's ORM.
This commit is contained in:
@@ -2503,6 +2503,10 @@ class InstanceTest(unittest.TestCase):
|
||||
doc_name = StringField()
|
||||
doc = EmbeddedDocumentField(Embedded)
|
||||
|
||||
def __eq__(self, other):
|
||||
return (self.doc_name == other.doc_name and
|
||||
self.doc == other.doc)
|
||||
|
||||
classic_doc = Doc(doc_name="my doc", doc=Embedded(name="embedded doc"))
|
||||
dict_doc = Doc(**{"doc_name": "my doc",
|
||||
"doc": {"name": "embedded doc"}})
|
||||
@@ -2519,6 +2523,10 @@ class InstanceTest(unittest.TestCase):
|
||||
doc_name = StringField()
|
||||
docs = ListField(EmbeddedDocumentField(Embedded))
|
||||
|
||||
def __eq__(self, other):
|
||||
return (self.doc_name == other.doc_name and
|
||||
self.docs == other.docs)
|
||||
|
||||
classic_doc = Doc(doc_name="my doc", docs=[
|
||||
Embedded(name="embedded doc1"),
|
||||
Embedded(name="embedded doc2")])
|
||||
@@ -2719,5 +2727,16 @@ class InstanceTest(unittest.TestCase):
|
||||
self.assertEquals(p4.height, 189)
|
||||
self.assertEquals(Person.objects(height=189).count(), 1)
|
||||
|
||||
def test_not_saved_eq(self):
|
||||
"""Ensure we can compare documents not saved.
|
||||
"""
|
||||
class Person(Document):
|
||||
pass
|
||||
|
||||
p = Person()
|
||||
p1 = Person()
|
||||
self.assertNotEqual(p, p1)
|
||||
self.assertEqual(p, p)
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user