У объекта 'str' нет атрибута 'strftime' 'в преобразовании ComplexDateTimeField - PullRequest
0 голосов
/ 22 января 2020

Хорошо, я реализую тестовый сценарий в сервисе, но я столкнулся с некоторыми проблемами.

Вот пример кода

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()

посетитель - объект из класса Посещение:

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 '

Что я здесь не так делаю?

1 Ответ

1 голос
/ 24 января 2020

Вам нужно использовать datetime экземпляры, а не строки, и вам не нужно использовать to_mongo или _convert_from_string.

Как описано в do c 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')}]

Если вам нужно больше примеров кода, вы можете просмотреть соответствующий тестовый файл .

...