【问题标题】:"'str' object has no attribute 'strftime'" in ComplexDateTimeField conversionComplexDateTimeField 转换中的“'str' 对象没有属性 'strftime'”
【发布时间】:2020-01-22 14:18:46
【问题描述】:

好吧,我正在服务中实现一个测试用例,但我遇到了一些问题。

这是代码示例

datetime_one = mongo.ComplexDateTimeField()._convert_from_string('2019, 12, 20, 19, 24, 10, 451923')

visitor = Visit()
visitor.user_id = '750645c7-bf66-4023-9a2d-9c942a25f6cd'
visitor.timestamp = mongo.ComplexDateTimeField().to_mongo(datetime_one)
visitor.save()

visitor 是 Visit 类中的一个对象:

from datetime import datetime
import mongoengine as mongo

class Visit(mongo.Document):

    user_id = mongo.UUIDField(required=True)
    timestamp = mongo.ComplexDateTimeField(required=True, default=datetime.utcnow, editable=False)

当我尝试运行此代码时,visitor.timestamp 行出现错误...

AttributeError: 'str' 对象没有属性 'strftime'

我在这里做错了什么?

【问题讨论】:

  • 这看起来像 Python,但你应该添加一个相应的标签。另外,请提取并提供minimal reproducible example。它也可能与您的数据库中的内容相关,因此也添加一个 sn-p 来填充测试集合。

标签: string mongodb mongoengine strftime


【解决方案1】:

您需要使用datetime 实例,而不是字符串,并且您不需要使用to_mongo_convert_from_string

ComplexDateTimeField 的文档中所述,与常规 DateTimeField 的唯一区别是日期将在幕后存储为字符串,但您与该属性的任何交互都将使用 datetime

见下文:

class Visit(Document):
    timestamp = ComplexDateTimeField()

visit = Visit(timestamp=datetime.utcnow())
visit.save()
assert isinstance(visit.timestamp, datetime)

# print object as it is stored in mongodb
print(Visit.objects.as_pymongo())
# Output: [{'timestamp': '2020,01,23,22,24,21,449017', '_id': ObjectId('5e2a1d15f3ede875e9c0b806')}]

如果您需要更多代码示例,请随时查看相应的test file

【讨论】:

  • 哦,我现在明白了。我想我应该转换它。谢谢你的解释!
猜你喜欢
  • 1970-01-01
  • 2013-11-22
  • 2021-10-12
  • 2020-04-07
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
相关资源
最近更新 更多