2013-10-03 2 views
0

Я хочу разрешить пользователям моего API фильтровать на поле datetime с auto_now = True. Предостережение заключается в том, что я хочу, чтобы они имели возможность сделать это в формате UNIX (т. Е.: 1380783641 вместо 2013-10-02T16: 46: 24.030321, который является стандартным форматом.)Изменить значение, переданное фильтром в запросе Tastypie

Я уже обезводил поле для того, чтобы сделать его как таковой с:

def dehydrate_created_on(self, bundle): 

     return bundle.data['created_on'].strftime('%s') 

Как я могу сделать то же самое значение, переданное в запросе, чтобы быть отфильтрованы на?

/api/v1/model/?created_on__gt=1380783641 

Это возвращает ValueError: (на французском языке)

"error": [ 
"Le format de la valeur « 1380783641 » n'est pas valide. Le format correct est AAAA-MM-DD HH:MM[:ss[.uuuuuu]][FH]." 
] 

Спасибо за вашу помощь.

+0

версию tastypie вы используете? – astreal

+0

@astreal Я использую Tastypie 0.9.15, ваше решение работает просто отлично (с startswith вместо starts_with)! Большое спасибо :-) – Ambroise

+0

cool, я обновлю ответ на вопрос о синтаксисе. – astreal

ответ

0

Hacky обходной путь основан на том, что можно найти here это переопределить метод: build_filter

def build_filters(self, filters=None): 
    if filters is None: 
     filters = {} 
    orm_filters = super(YourResource, self).build_filters(filters) 
    for filt in orm_filters: 
     if filt.startswith('created_on'): 
      orm_filters[filt] = datetime.datetime.fromtimestamp(float(filters[filt])) 
    return orm_filters 
Смежные вопросы