【发布时间】:2019-05-28 12:16:26
【问题描述】:
我需要在 DRF 上按日期对查询集的结果进行分组
""" Django model """
class Matches(models.Model):
name = models.CharField(max_length=100)
platform = models.CharField(max_length=100)
mode = models.CharField(max_length=100)
kills = models.IntegerField()
date = models.DateTimeField()
""" Serializer """
class MatchesSerializer(serializers.ModelSerializer):
class Meta:
model = models.Matches
fields = ('name', 'platform', 'mode', 'kills', 'date')
""" views """
class Matches(generics.ListAPIView):
serializer_class = serializers.MatchesSerializer
filter_backends = (filters.OrderingFilter,)
lookup_field = 'name'
ordering = ('-date',)
def get_queryset(self):
username = self.kwargs['name']
return models.Matches.objects.filter(name=username)
期望的输出(只是一个例子):
[
{
'date':'2019-01-01',
'data':[
{
'platform':'ps4',
'mode':'solo',
'kills':10,
'date':'2019-01-01 10:00:00'
},
{
'platform':'ps4',
'mode':'duo',
'kills':10,
'date':'2019-01-01 12:00:00'
},
{
'platform':'ps4',
'mode':'squad',
'kills':10,
'date':'2019-01-01 11:00:00'
},
]
},
{
'date':'2019-01-02',
'data':[
{
'platform':'ps4',
'mode':'solo',
'kills':1,
'date':'2019-01-02 10:00:00'
},
{
'platform':'ps4',
'mode':'duo',
'kills':2,
'date':'2019-01-02 12:00:00'
},
{
'platform':'ps4',
'mode':'squad',
'kills':3,
'date':'2019-01-02 11:00:00'
},
]
}
]
对我来说,简单的解决方案是在 django 上进行原始查询并创建一个序列化程序,但感觉不是那么 Pythonic...
所以看起来 DRF 有一些漂亮的方法让它看起来不错,也许使用 to_representation...
【问题讨论】:
-
你能告诉我们你的
views.py吗?它可能在那里您应该更改和注释/聚合您的项目 -
添加了当前视图类,即只显示匹配列表,不分组
-
你的答案可能在this post
-
两个 cmets 似乎都回答了我的问题!你们中的任何人都可以提供答案以便我接受吗?
标签: django django-rest-framework