2016-04-17 1 views
1

Я пытаюсь выяснить, почему дата не работает в flask-restplus.Исправить «формат неподдерживаемых дат» при маршалировании данных из конечной точки отдыха

MarshallingError: Unable to marshal field "lastUpdate" value "<built-in method now of type object at 0x10264d6e0>": Unsupported DateTime format 
127.0.0.1 - - [16/Apr/2016 22:24:18] "POST /api/v1/course/record/ab HTTP/1.1" 500 - 

А вот объект, который используется для сортировочной

course_record_model = ns.model('Model', { 
    'topic': fields.String, 
    'totalMinutes': fields.Integer, 
    'percentComplete': fields.Integer, 
    'lastUpdate': fields.DateTime, 
}) 

Обратите внимание на fields.DateTime. Это проблема.

def __init__(self, courseid, memberid, **kwargs): 
    """Create instance.""" 
    db.Model.__init__(self, **kwargs) 
    self.courseID = courseid 
    self.memberID = memberid 
    self.lastUpdate = datetime.datetime.now 

Я пытался добавить некоторые форматы, но это, кажется, не помогает, вот документы

класс fields.DateTime (dt_format 'rfc822' = ** kwargs) Возвращать а форматированная строка даты и времени в UTC. Поддерживаемые форматы: RFC 822 и ISO 8601.

См. Email.utils.formatdate() для получения дополнительной информации о формате RFC 822.

См. Datetime.datetime.isoformat() для получения дополнительной информации о формате ISO 8601 .

Параметры: dt_format (ул) - «rfc822» или «ISO8601»

Не знаете, как сделать формат даты, когда она поступает из вызова API.

ответ

1

Как вы можете видеть, у вас есть "<built-in method now of type object at 0x10264d6e0>" вместо datetime объект.

Я подозреваю, что где-то в вашем коде, вы забыли ввести скобку () так:

someobject.lastUpdate = datetime.now 

Но это должно быть

someobject.lastUpdate = datetime.now() 
+0

Это был он, теперь возвращается «lastUpdate»: «2016- 04-17T16: 03: 43.525476 « – nycynik

+0

self.lastUpdate = datetime.datetime.now не был self.lastUpdate = datetime.datetime.now() – nycynik

+2

@nycynik: не связан: не используйте' datetime.now() ', используйте либо 'datetime.utcnow()' или 'datetime.now (some_timezone)' вместо. Просто 'datetime.now()' может создавать неоднозначное значение, а смещение utc может быть различным в разное время (или в разных часовых поясах). – jfs