Фильтровать дату по месяцу DRF - PullRequest
0 голосов
/ 05 января 2019

Я хочу отфильтровать созданную мной модель по месяцу и году.

Это моя модель:

class Cotisation(models.Model):
    date = models.DateTimeField()
    campagne = models.ForeignKey(Campagne, on_delete=models.CASCADE)

    class Meta:
        managed = True
        db_table = 'cotisations'
        ordering = ['-id']

Это мой взгляд:

class CotisationViewSet(viewsets.ModelViewSet):
    queryset = Cotisation.objects.all()
    serializer_class = CotisationSerializer
    pagination_class = StandardResultsSetPagination
    filter_backends = (filters.SearchFilter, DjangoFilterBackend, filters.OrderingFilter,)
    filter_class = CotisationFilter
    search_fields = ('organism__name', 'organism__num_onic')
    ordering_fields = ('date',)

А это мой класс фильтра:

 class CotisationFilter(django_filters.FilterSet):
     month = django_filters.NumberFilter(field_name='date', lookup_expr='month')
     year = django_filters.NumberFilter(field_name='date', lookup_expr='year')

     class Meta:
         model = Cotisation
         fields = ['organism__id', 'campaign__id', 'campaign__year', 'month', 'year']

Когда я пытаюсь выполнить запрос по году, он работает хорошо:

GET http://{{URL}}/cotisations/?year=2019

Но это не работает, когда я пытаюсь с месяцем:

GET http://{{URL}}/cotisations/?month=10

Заранее спасибо.

Лучший, Джереми.

PS: и с новым годом!

РЕШЕНИЕ:

@ Хорион ответил отлично.

Вот ответ, который решил проблему: Ответ

1 Ответ

0 голосов
/ 05 января 2019

Я использовал точный фильтр (на PG) несколько раз, и проблем не было.

Возможно, вы используете MySQL в качестве базы данных по умолчанию, если это так, то вам нужно установить определение часового пояса для вашей базы данных, чтобы иметь возможность использовать этот фильтр, когда USE_TZ = True.

Проверьте этот билет и этот вопрос

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...