diff --git a/mongoengine/document.py b/mongoengine/document.py index 2e3eee9d..ff39b13a 100644 --- a/mongoengine/document.py +++ b/mongoengine/document.py @@ -312,8 +312,9 @@ class Document(BaseDocument): # In PyMongo 3.0, the save() call calls internally the _update() call # but they forget to return the _id value passed back, therefore getting it back here if not object_id and pymongo.version_tuple == (3, 0): - object_id = self._qs.filter(**self._object_key).first() and \ - self._qs.filter(**self._object_key).first().pk + pk_as_mongo_obj = self._fields.get(self._meta['id_field']).to_mongo(self.pk) + object_id = self._qs.filter(pk=pk_as_mongo_obj).first() and \ + self._qs.filter(pk=pk_as_mongo_obj).first().pk else: object_id = doc['_id'] updates, removals = self._delta() diff --git a/tests/fields/fields.py b/tests/fields/fields.py index 0dc239c4..071f1dd0 100644 --- a/tests/fields/fields.py +++ b/tests/fields/fields.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- import sys +from nose.plugins.skip import SkipTest + sys.path[0:0] = [""] import datetime @@ -2491,8 +2493,25 @@ class FieldTest(unittest.TestCase): binary_id = uuid.uuid4().bytes att = Attachment(id=binary_id).save() self.assertEqual(1, Attachment.objects.count()) + self.assertEqual(1, Attachment.objects.filter(id=att.id).count()) # TODO use assertIsNotNone once Python 2.6 support is dropped - self.assertFalse(Attachment.objects.filter(id=binary_id).first() is not None) + self.assertTrue(Attachment.objects.filter(id=att.id).first() is not None) + att.delete() + self.assertEqual(0, Attachment.objects.count()) + + def test_binary_field_primary_filter_by_binary_pk_as_str(self): + + raise SkipTest("Querying by id as string is not currently supported") + + class Attachment(Document): + id = BinaryField(primary_key=True) + + Attachment.drop_collection() + binary_id = uuid.uuid4().bytes + att = Attachment(id=binary_id).save() + self.assertEqual(1, Attachment.objects.filter(id=binary_id).count()) + # TODO use assertIsNotNone once Python 2.6 support is dropped + self.assertTrue(Attachment.objects.filter(id=binary_id).first() is not None) att.delete() self.assertEqual(0, Attachment.objects.count())