InvalidDocumentError:用于创建“Source”实例的无效数据。 syncStatus - 'datetime.datetime'对象没有属性'strip'

时间:2016-07-23 22:37:59

标签: django datetime mongoengine

在尝试查询下面描述的集合时,我一直遇到以下问题:

class HistorySync(DynamicEmbeddedDocument):
    status = StringField()
    oldestDate = DateTimeField()

    def __init__(self, *args, **kwargs):
        """Overload constructor to deal with history sync status documents"""
        if 'oldestDate' in kwargs:
            kwargs['oldestDate'] = dateparser.parse(kwargs['oldestDate'])

        super(DynamicEmbeddedDocument, self).__init__(*args, **kwargs)


class SyncStatus(DynamicEmbeddedDocument):
    status = StringField()
    synchedAt = DateTimeField()
    newestDate = DateTimeField()

    def __init__(self, *args, **kwargs):
        """Overload constructor to deal with most recent sync status documents"""
        if 'synchedAt' in kwargs:
            kwargs['synchedAt'] = dateparser.parse(kwargs['synchedAt'])

        if 'newestDate' in kwargs:
            kwargs['newestDate'] = dateparser.parse(kwargs['newestDate'])

        super(DynamicEmbeddedDocument, self).__init__(*args, **kwargs)

class Source(UtilityDocument, DynamicDocument):

    source = StringField(required=True)
    sourceName = StringField(required=True)
    supportedDataTypes = ListField(StringField())
    devices = ListField(StringField())
    connectedSince = DateTimeField()
    externalId = StringField()
    historySync = EmbeddedDocumentField(HistorySync)
    syncStatus = EmbeddedDocumentField(SyncStatus)

主文档(Source)能够在我的Web应用程序中保存正常,但每当我尝试使用

等语句访问源文档时
Source.objects.first()

我收到以下错误:

    Traceback (most recent call last):
      File "<console>", line 1, in <module>
      File "/Library/Python/2.7/site-packages/mongoengine/queryset/base.py", line 264, in first
        result = queryset[0]
      File "/Library/Python/2.7/site-packages/mongoengine/queryset/base.py", line 163, in __getitem__
        only_fields=self.only_fields)
      File "/Library/Python/2.7/site-packages/mongoengine/base/document.py", line 725, in _from_son
        raise InvalidDocumentError(msg)
    InvalidDocumentError: Invalid data to create a `Source` instance.
    syncStatus - 'datetime.datetime' object has no attribute 'strip'

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用

class Source(UtilityDocument, DynamicDocument):
    syncStatus = EmbeddedDocumentField(SyncStatus)

    def __init__(self,*args,**kwargs):
         super(DynamicDocument, self).__init__(*args, **kwargs)

    def __str__(self):` 
        return str(self.syncStatus)

    @property
    def syncStatus(self):
        return str(self.syncStatus)  

会在返回时将属性转换为字符串。