python - Django Rest Framework 组和计数 POST
问题描述
我是DRF的新手,正在尝试创建某种动态序列化程序来计算发布的对象,但我不知道该怎么做。
模型.py
class Company(TimeStampedModel):
name = models.CharField(max_length=200, blank=True)
description = models.TextField(blank=True)
date_founded = models.DateField(null=True, blank=True)
def get_year (self):
return self.date_founded.strftime("%Y")
def get_quarter (self):
x = self.date_founded
if int(x.strftime("%m")) <= 3:
return '1'
elif int(x.strftime("%m")) <= 6 and int(x.strftime("%m")) > 3:
return '2'
elif int(x.strftime("%m")) <= 9 and int(x.strftime("%m")) > 6:
return '3'
else:
return '4'
def __unicode__(self):
return u'{0}'.format(self.name)
序列化程序.py
class StatsSerializer(serializers.ModelSerializer):
year = serializers.DateField(source='get_year')
quarter = serializers.CharField(source='get_quarter')
# total = serializers.SerializerMethodField()
class Meta:
model = Company
fields = ['year', 'quarter', #'total']
视图.py
class CompanyStatsView(generics.ListCreateAPIView):
queryset = Company.objects.all()
serializer_class = StatsSerializer
到目前为止,我的结果是:
[
{
"year": "2018",
"quarter": "2"
},
{
"year": "2018",
"quarter": "2"
},
{
"year": "2018",
"quarter": "2"
},
{
"year": "2018",
"quarter": "2"
},
{
"year": "2018",
"quarter": "3"
},
{
"year": "2018",
"quarter": "3"
},
]
但是我正在寻找这样的东西:
[
{
"year": "2018",
"quarter": "2"
"total": 4
},
{
"year": "2018",
"quarter": "3"
"total": 2
},
]
如何对这些值进行分组和计数?任何帮助深表感谢!
解决方案
您想要的结果不是类似 REST 的端点。
请参阅https://docs.djangoproject.com/en/3.1/topics/db/aggregation/#values以了解如何在 Django 中构建 GROUP BY 查询。
请参阅https://docs.djangoproject.com/en/3.1/ref/models/database-functions/#extract以了解如何在数据库中按年份和季度进行分组。
最后你需要构建一个端点,请参阅Django Restframework: What view to use for statistics summary of queryset?这看起来像是您的问题的重复。
推荐阅读
- html - 为什么网站在手机上放大(bulma)?
- mailchimp - 使用 MailChimp API v3 添加地址
- html - 为什么向我的图像添加属性链接会移动我的图像?
- c# - 2 不同组框中的单选按钮
- typescript - 在这种情况下,TypeScript 类型系统是否过于宽松?
- reactjs - 错误:在渲染时,Provider 的钩子调用无效
- java - Javassist - 向参数添加注释 [已解决]
- reactjs - 如何比较 React Hooks useEffect 上的 oldValues 和 newValues?多次重新渲染
- jupyter-notebook - Jupyter 笔记本正在加载,但在运行时没有任何反应
- python - Flask 应用程序未在 localhost 上运行,没有错误