2013-11-20 4 views
3

В настоящее время я создаю приложение с использованием Django и django-rest-framework.Django Rest Framework - фильтры от datetime

Моя проблема относительно проста, но я застрял в какой-то момент.

В основном, я управляю коллекционными и коллекционными предметами. Коллективный объект присваивается коллекции. Оба объекта имеют поле «created_at».

Я хотел бы создать представление, содержащее все Коллекции и для каждого, все Коллекционные. Он работает легко.

Теперь я хочу сгенерировать ту же структуру, но с фильтрующим параметром «createdfrom», чтобы иметь новые коллекции и новые коллекционные предметы с предоставленной даты.

Вот код, я с помощью Django-фильтры:

class CollectionFilter(django_filters.FilterSet): 
    # /api/collections/?createdfrom=2013-11-20 
    createdfrom = django_filters.DateTimeFilter(name="collectibles__created_at", lookup_type='gt') 
    class Meta: 
     model = Collection 

Это работает почти замечательно. Существует лишь несколько вопросов:

  • Он отображает все Коллекционирование из коллекции, в которых по крайней мере один из них соответствуют фильтру (в основном, это также отображает устаревшие элементы наряду с новостями из них)

  • Он не показывает новые коллекции, созданные после такой даты.

Может ли кто-нибудь мне помочь?

Большое спасибо

+0

Вам нужно, чтобы вы предложили Model.objects.filter (created_date__gte = your_date_object)? Вы можете включить это в представление, если существует параметр GET. –

ответ

0

Если я правильно понимаю вашу проблему правильно, как сбор и Коллекционная должны быть дата> дата, указанная для фильтра. Таким образом, мы определим «действие», которое должно быть выполнено с QuerySet и значением, предоставленным после этого. Это описано в django-filter documentation covering Core Arguments (specifically action).

def action(queryset, value): 
    return queryset.filter(
     collectibles__created_at__gt=value, 
     created_at__gt=value, 
    ) 

class CollectionFilter(django_filters.FilterSet): 
    # /api/collections/?createdfrom=2013-11-20 
    createdfrom = django_filters.DateTimeFilter(
     name="collectibles__created_at", 
     action=action, 
    ) 

    class Meta: 
     model = Collection 

Мы создали определение action функцию, которая будет вызвана с QuerySet в качестве первого аргумента, а значение (дата) в качестве второго аргумента.

действие: Необязательный отозваны, который говорит фильтру, как обрабатывать QuerySet. Он получает QuerySet и значение для фильтрации и должен возвращать Queryset, который фильтруется соответствующим образом. - From Documentation

Смежные вопросы