【问题标题】:Django Rest Framework: changing output format of annotated field in querysetDjango Rest Framework:更改查询集中注释字段的输出格式
【发布时间】:2021-04-23 04:21:25
【问题描述】:

你好 StackOverflow 社区,

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

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

views.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'

【问题讨论】:

    标签: python django django-rest-framework drf-queryset


    【解决方案1】:

    您应该改用Extract/ExtractYear 数据库函数

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

    【讨论】:

    • 与 Extract 配合使用效果很好。非常感谢您的帮助:)
    猜你喜欢
    • 2018-06-17
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2021-10-17
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    相关资源
    最近更新 更多