Merge pull request #2082 from divomen/v0.18.0_fix
Fix a big issue when determine if there is a new document
This commit is contained in:
commit
7fac0ef961
@ -371,7 +371,7 @@ class Document(six.with_metaclass(TopLevelDocumentMetaclass, BaseDocument)):
|
|||||||
if write_concern is None:
|
if write_concern is None:
|
||||||
write_concern = {}
|
write_concern = {}
|
||||||
|
|
||||||
doc_id = self.to_mongo(fields=['id'])
|
doc_id = self.to_mongo(fields=[self._meta['id_field']])
|
||||||
created = ('_id' not in doc_id or self._created or force_insert)
|
created = ('_id' not in doc_id or self._created or force_insert)
|
||||||
|
|
||||||
signals.pre_save_post_validation.send(self.__class__, document=self,
|
signals.pre_save_post_validation.send(self.__class__, document=self,
|
||||||
|
@ -1,33 +1,30 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import bson
|
|
||||||
import os
|
import os
|
||||||
import pickle
|
import pickle
|
||||||
import unittest
|
import unittest
|
||||||
import uuid
|
import uuid
|
||||||
import warnings
|
|
||||||
import weakref
|
import weakref
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
|
import bson
|
||||||
from bson import DBRef, ObjectId
|
from bson import DBRef, ObjectId
|
||||||
from pymongo.errors import DuplicateKeyError
|
from pymongo.errors import DuplicateKeyError
|
||||||
from six import iteritems
|
from six import iteritems
|
||||||
|
|
||||||
from mongoengine.mongodb_support import get_mongodb_version, MONGODB_36, MONGODB_34
|
|
||||||
from mongoengine.pymongo_support import list_collection_names
|
|
||||||
from tests import fixtures
|
|
||||||
from tests.fixtures import (PickleEmbedded, PickleTest, PickleSignalsTest,
|
|
||||||
PickleDynamicEmbedded, PickleDynamicTest)
|
|
||||||
from tests.utils import MongoDBTestCase, get_as_pymongo
|
|
||||||
|
|
||||||
from mongoengine import *
|
from mongoengine import *
|
||||||
from mongoengine.base import get_document, _document_registry
|
|
||||||
from mongoengine.connection import get_db
|
|
||||||
from mongoengine.errors import (NotRegistered, InvalidDocumentError,
|
|
||||||
InvalidQueryError, NotUniqueError,
|
|
||||||
FieldDoesNotExist, SaveConditionError)
|
|
||||||
from mongoengine.queryset import NULLIFY, Q
|
|
||||||
from mongoengine.context_managers import switch_db, query_counter
|
|
||||||
from mongoengine import signals
|
from mongoengine import signals
|
||||||
|
from mongoengine.base import _document_registry, get_document
|
||||||
|
from mongoengine.connection import get_db
|
||||||
|
from mongoengine.context_managers import query_counter, switch_db
|
||||||
|
from mongoengine.errors import (FieldDoesNotExist, InvalidDocumentError, \
|
||||||
|
InvalidQueryError, NotRegistered, NotUniqueError, SaveConditionError)
|
||||||
|
from mongoengine.mongodb_support import MONGODB_34, MONGODB_36, get_mongodb_version
|
||||||
|
from mongoengine.pymongo_support import list_collection_names
|
||||||
|
from mongoengine.queryset import NULLIFY, Q
|
||||||
|
from tests import fixtures
|
||||||
|
from tests.fixtures import (PickleDynamicEmbedded, PickleDynamicTest, \
|
||||||
|
PickleEmbedded, PickleSignalsTest, PickleTest)
|
||||||
|
from tests.utils import MongoDBTestCase, get_as_pymongo
|
||||||
|
|
||||||
TEST_IMAGE_PATH = os.path.join(os.path.dirname(__file__),
|
TEST_IMAGE_PATH = os.path.join(os.path.dirname(__file__),
|
||||||
'../fields/mongoengine.png')
|
'../fields/mongoengine.png')
|
||||||
@ -1260,6 +1257,50 @@ class InstanceTest(MongoDBTestCase):
|
|||||||
self.assertTrue(w1.toggle)
|
self.assertTrue(w1.toggle)
|
||||||
self.assertEqual(w1.count, 3)
|
self.assertEqual(w1.count, 3)
|
||||||
|
|
||||||
|
def test_save_update_selectively(self):
|
||||||
|
class WildBoy(Document):
|
||||||
|
age = IntField()
|
||||||
|
name = StringField()
|
||||||
|
|
||||||
|
WildBoy.drop_collection()
|
||||||
|
|
||||||
|
WildBoy(age=12, name='John').save()
|
||||||
|
|
||||||
|
boy1 = WildBoy.objects().first()
|
||||||
|
boy2 = WildBoy.objects().first()
|
||||||
|
|
||||||
|
boy1.age = 99
|
||||||
|
boy1.save()
|
||||||
|
boy2.name = 'Bob'
|
||||||
|
boy2.save()
|
||||||
|
|
||||||
|
fresh_boy = WildBoy.objects().first()
|
||||||
|
self.assertEqual(fresh_boy.age, 99)
|
||||||
|
self.assertEqual(fresh_boy.name, 'Bob')
|
||||||
|
|
||||||
|
def test_save_update_selectively_with_custom_pk(self):
|
||||||
|
# Prevents regression of #2082
|
||||||
|
class WildBoy(Document):
|
||||||
|
pk_id = StringField(primary_key=True)
|
||||||
|
age = IntField()
|
||||||
|
name = StringField()
|
||||||
|
|
||||||
|
WildBoy.drop_collection()
|
||||||
|
|
||||||
|
WildBoy(pk_id='A', age=12, name='John').save()
|
||||||
|
|
||||||
|
boy1 = WildBoy.objects().first()
|
||||||
|
boy2 = WildBoy.objects().first()
|
||||||
|
|
||||||
|
boy1.age = 99
|
||||||
|
boy1.save()
|
||||||
|
boy2.name = 'Bob'
|
||||||
|
boy2.save()
|
||||||
|
|
||||||
|
fresh_boy = WildBoy.objects().first()
|
||||||
|
self.assertEqual(fresh_boy.age, 99)
|
||||||
|
self.assertEqual(fresh_boy.name, 'Bob')
|
||||||
|
|
||||||
def test_update(self):
|
def test_update(self):
|
||||||
"""Ensure that an existing document is updated instead of be
|
"""Ensure that an existing document is updated instead of be
|
||||||
overwritten.
|
overwritten.
|
||||||
@ -1552,9 +1593,9 @@ class InstanceTest(MongoDBTestCase):
|
|||||||
EmbeddedChildModel)
|
EmbeddedChildModel)
|
||||||
|
|
||||||
emb = EmbeddedChildModel(id={'1': [1]})
|
emb = EmbeddedChildModel(id={'1': [1]})
|
||||||
ParentModel(children=emb)._get_changed_fields()
|
ParentModel(child=emb)._get_changed_fields()
|
||||||
|
|
||||||
def test__get_changed_fields_same_ids_reference_field_does_not_enters_infinite_loop(self):
|
def test__get_changed_fields_same_ids_reference_field_does_not_enters_infinite_loop_full_caseEmailUser(self):
|
||||||
class User(Document):
|
class User(Document):
|
||||||
id = IntField(primary_key=True)
|
id = IntField(primary_key=True)
|
||||||
name = StringField()
|
name = StringField()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user