0

你好 StackOverflow 社区,

我目前正在努力在我的views.py 中指定输出格式。我有一列“日期”,它使用以下格式:2021-01-14。在我的回复中,我想更改日期格式,使其仅显示2021 年

我已经用Cast试过了,但似乎这不是正确的方法。对于这个视图,我不使用序列化器,因此添加它就没有选项了。

视图.py

class FilterParams(generics.ListAPIView):
    model = Variants
    queryset = Variants.objects.all()
    def get(self, request, *args, **kwargs):
        queryset = self.get_queryset()
        ModelsByYears = queryset.values('model').distinct().annotate(min_year=Min('date')).annotate(max_year=Max('date')).order_by('model')
        return Response(data= {'ModelsByYears':ModelsByYears})

我尝试了什么:

class FilterParams(generics.ListAPIView):
    model = Variants
    queryset = Variants.objects.all()
    def get(self, request, *args, **kwargs):
        queryset = self.get_queryset()
        ModelsByYears = queryset.values('model').distinct().annotate(min_year=Min(Cast('date', DateTimeField(format="%Y")))).annotate(max_year=Max('date')).order_by('model')
        return Response(data= {'ModelsByYears':ModelsByYears})

错误信息

TypeError: __init__() got an unexpected keyword argument 'format'

4

1 回答 1

1

您应该改用Extract/ExtractYear数据库功能

采用表示 DateField、DateTimeField、TimeField 或 DurationField 和 lookup_name 的表达式,并将 lookup_name 引用的日期部分作为 IntegerField 返回。Django 通常使用数据库的提取功能,因此您可以使用数据库支持的任何 lookup_name。

于 2021-01-18T20:52:48.257 回答