按月过滤日期 DRF

Jér*_*eau 1 python django python-3.x django-rest-framework

我想按月份和年份过滤我创建的模型。

这是我的模型:

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

    class Meta:
        managed = True
        db_table = 'cotisations'
        ordering = ['-id']
Run Code Online (Sandbox Code Playgroud)

这是我的观点:

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',)
Run Code Online (Sandbox Code Playgroud)

这是我的过滤器类:

 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']
Run Code Online (Sandbox Code Playgroud)

当我尝试按年份查询时,效果很好:

GET http://{{URL}}/cotisations/?year=2019
Run Code Online (Sandbox Code Playgroud)

但当我尝试使用月份时它不起作用:

GET http://{{URL}}/cotisations/?month=10
Run Code Online (Sandbox Code Playgroud)

先感谢您。

最好的,杰里米。

PS:新年快乐!

解决方案:

@Horion完美回答。

这是解决问题的答案:答案

Hor*_*ion 5

我已经使用精确过滤器(在 PG 上)好几次了,没有出现任何问题。

可能您正在使用 MySQL 作为默认数据库,如果是这样,那么您必须将时区定义安装到数据库中,以便在 USE_TZ = True 时能够使用此过滤器。

检查这张票这个问题

希望这可以帮助。