More updates
This commit is contained in:
parent
c419f3379a
commit
d1add62a06
@ -264,7 +264,7 @@ class ComplexBaseField(BaseField):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
field = None
|
field = None
|
||||||
_dereference = False
|
__dereference = False
|
||||||
|
|
||||||
def __get__(self, instance, owner):
|
def __get__(self, instance, owner):
|
||||||
"""Descriptor to automatically dereference references.
|
"""Descriptor to automatically dereference references.
|
||||||
@ -276,8 +276,6 @@ class ComplexBaseField(BaseField):
|
|||||||
dereference = self.field is None or isinstance(self.field,
|
dereference = self.field is None or isinstance(self.field,
|
||||||
(GenericReferenceField, ReferenceField))
|
(GenericReferenceField, ReferenceField))
|
||||||
if not self._dereference and instance._initialised and dereference:
|
if not self._dereference and instance._initialised and dereference:
|
||||||
from dereference import DeReference
|
|
||||||
self._dereference = DeReference() # Cached
|
|
||||||
instance._data[self.name] = self._dereference(
|
instance._data[self.name] = self._dereference(
|
||||||
instance._data.get(self.name), max_depth=1, instance=instance,
|
instance._data.get(self.name), max_depth=1, instance=instance,
|
||||||
name=self.name
|
name=self.name
|
||||||
@ -293,14 +291,13 @@ class ComplexBaseField(BaseField):
|
|||||||
value = BaseDict(value, instance, self.name)
|
value = BaseDict(value, instance, self.name)
|
||||||
instance._data[self.name] = value
|
instance._data[self.name] = value
|
||||||
|
|
||||||
if self._dereference and instance._initialised and \
|
if (instance._initialised and isinstance(value, (BaseList, BaseDict))
|
||||||
isinstance(value, (BaseList, BaseDict)) and not value._dereferenced:
|
and not value._dereferenced):
|
||||||
value = self._dereference(
|
value = self._dereference(
|
||||||
value, max_depth=1, instance=instance, name=self.name
|
value, max_depth=1, instance=instance, name=self.name
|
||||||
)
|
)
|
||||||
value._dereferenced = True
|
value._dereferenced = True
|
||||||
instance._data[self.name] = value
|
instance._data[self.name] = value
|
||||||
|
|
||||||
return value
|
return value
|
||||||
|
|
||||||
def __set__(self, instance, value):
|
def __set__(self, instance, value):
|
||||||
@ -441,6 +438,13 @@ class ComplexBaseField(BaseField):
|
|||||||
|
|
||||||
owner_document = property(_get_owner_document, _set_owner_document)
|
owner_document = property(_get_owner_document, _set_owner_document)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _dereference(self,):
|
||||||
|
if not self.__dereference:
|
||||||
|
from dereference import DeReference
|
||||||
|
self.__dereference = DeReference() # Cached
|
||||||
|
return self.__dereference
|
||||||
|
|
||||||
|
|
||||||
class ObjectIdField(BaseField):
|
class ObjectIdField(BaseField):
|
||||||
"""An field wrapper around MongoDB's ObjectIds.
|
"""An field wrapper around MongoDB's ObjectIds.
|
||||||
@ -493,8 +497,9 @@ class DocumentMetaclass(type):
|
|||||||
attrs.update(_get_mixin_fields(p_base))
|
attrs.update(_get_mixin_fields(p_base))
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
metaclass = attrs.get('__metaclass__')
|
|
||||||
super_new = super(DocumentMetaclass, cls).__new__
|
super_new = super(DocumentMetaclass, cls).__new__
|
||||||
|
|
||||||
|
metaclass = attrs.get('__metaclass__')
|
||||||
if metaclass and issubclass(metaclass, DocumentMetaclass):
|
if metaclass and issubclass(metaclass, DocumentMetaclass):
|
||||||
return super_new(cls, name, bases, attrs)
|
return super_new(cls, name, bases, attrs)
|
||||||
|
|
||||||
@ -566,7 +571,8 @@ class DocumentMetaclass(type):
|
|||||||
attrs['_superclasses'] = superclasses
|
attrs['_superclasses'] = superclasses
|
||||||
|
|
||||||
if 'Document' not in _module_registry:
|
if 'Document' not in _module_registry:
|
||||||
from mongoengine import Document, EmbeddedDocument, DictField
|
from mongoengine.document import Document, EmbeddedDocument
|
||||||
|
from mongoengine.fields import DictField
|
||||||
_module_registry['Document'] = Document
|
_module_registry['Document'] = Document
|
||||||
_module_registry['EmbeddedDocument'] = EmbeddedDocument
|
_module_registry['EmbeddedDocument'] = EmbeddedDocument
|
||||||
_module_registry['DictField'] = DictField
|
_module_registry['DictField'] = DictField
|
||||||
|
@ -329,6 +329,7 @@ class QuerySet(object):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
__already_indexed = set()
|
__already_indexed = set()
|
||||||
|
__dereference = False
|
||||||
|
|
||||||
def __init__(self, document, collection):
|
def __init__(self, document, collection):
|
||||||
self._document = document
|
self._document = document
|
||||||
@ -600,7 +601,6 @@ class QuerySet(object):
|
|||||||
|
|
||||||
if self._hint != -1:
|
if self._hint != -1:
|
||||||
self._cursor_obj.hint(self._hint)
|
self._cursor_obj.hint(self._hint)
|
||||||
|
|
||||||
return self._cursor_obj
|
return self._cursor_obj
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -1153,8 +1153,7 @@ class QuerySet(object):
|
|||||||
.. versionadded:: 0.4
|
.. versionadded:: 0.4
|
||||||
.. versionchanged:: 0.5 - Fixed handling references
|
.. versionchanged:: 0.5 - Fixed handling references
|
||||||
"""
|
"""
|
||||||
from dereference import DeReference
|
return self._dereference(self._cursor.distinct(field), 1)
|
||||||
return DeReference()(self._cursor.distinct(field), 1)
|
|
||||||
|
|
||||||
def only(self, *fields):
|
def only(self, *fields):
|
||||||
"""Load only a subset of this document's fields. ::
|
"""Load only a subset of this document's fields. ::
|
||||||
@ -1854,10 +1853,16 @@ class QuerySet(object):
|
|||||||
|
|
||||||
.. versionadded:: 0.5
|
.. versionadded:: 0.5
|
||||||
"""
|
"""
|
||||||
from dereference import DeReference
|
|
||||||
# Make select related work the same for querysets
|
# Make select related work the same for querysets
|
||||||
max_depth += 1
|
max_depth += 1
|
||||||
return DeReference()(self, max_depth=max_depth)
|
return self._dereference(self, max_depth=max_depth)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _dereference(self):
|
||||||
|
if not self.__dereference:
|
||||||
|
from dereference import DeReference
|
||||||
|
self.__dereference = DeReference() # Cached
|
||||||
|
return self.__dereference
|
||||||
|
|
||||||
|
|
||||||
class QuerySetManager(object):
|
class QuerySetManager(object):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user