diff --git a/mongoengine/base/fields.py b/mongoengine/base/fields.py index ae86bc8d..347940f5 100644 --- a/mongoengine/base/fields.py +++ b/mongoengine/base/fields.py @@ -1,5 +1,4 @@ import operator -import warnings import weakref from bson import DBRef, ObjectId, SON @@ -18,7 +17,7 @@ class BaseField: may be added to subclasses of `Document` to define a document's schema. """ - name = None + name = None # set in TopLevelDocumentMetaclass _geo_index = False _auto_gen = False # Call `generate` to generate a value _auto_dereference = True @@ -265,7 +264,9 @@ class ComplexBaseField(BaseField): items in a list / dict rather than one at a time. """ - field = None + def __init__(self, field=None, **kwargs): + self.field = field + super().__init__(**kwargs) def __get__(self, instance, owner): """Descriptor to automatically dereference references.""" diff --git a/mongoengine/fields.py b/mongoengine/fields.py index ce93579b..4ef5dafc 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -556,11 +556,11 @@ class DateTimeField(BaseField): if callable(value): return value() - if not isinstance(value, str): + if isinstance(value, str): + return self._parse_datetime(value) + else: return None - return self._parse_datetime(value) - @staticmethod def _parse_datetime(value): # Attempt to parse a datetime from a string @@ -923,10 +923,9 @@ class ListField(ComplexBaseField): """ def __init__(self, field=None, max_length=None, **kwargs): - self.field = field self.max_length = max_length kwargs.setdefault("default", lambda: []) - super().__init__(**kwargs) + super().__init__(field=field, **kwargs) def __get__(self, instance, owner): if instance is None: @@ -1008,14 +1007,9 @@ class SortedListField(ListField): to perform a push operation. """ - _ordering = None - _order_reverse = False - def __init__(self, field, **kwargs): - if "ordering" in kwargs.keys(): - self._ordering = kwargs.pop("ordering") - if "reverse" in kwargs.keys(): - self._order_reverse = kwargs.pop("reverse") + self._ordering = kwargs.pop("ordering", None) + self._order_reverse = kwargs.pop("reverse", False) super().__init__(field, **kwargs) def to_mongo(self, value, use_db_field=True, fields=None): @@ -1065,11 +1059,10 @@ class DictField(ComplexBaseField): """ def __init__(self, field=None, *args, **kwargs): - self.field = field self._auto_dereference = False kwargs.setdefault("default", lambda: {}) - super().__init__(*args, **kwargs) + super().__init__(*args, field=field, **kwargs) def validate(self, value): """Make sure that a list of valid fields is being used."""