我一直在仔细研究这个问题,看了很多stackoverflow问题并经历了aggregation docs 我需要获取按日期分组的PropertyImpressions数据集。这是PropertyImpression模型:
#models.py
class PropertyImpression(models.Model):
'''
Impression data for Property Items
'''
property = models.ForeignKey(Property, db_index=True)
imp_date = models.DateField(auto_now_add=True)
我已经尝试了很多视图代码的变体,但是我发布这段代码是因为我认为它是最符合逻辑的简单代码,根据文档和示例,我应该按照我的目的去做。< / p>
#views.py
def admin_home(request):
'''
this is the home dashboard for admins, which currently just means staff.
Other users that try to access this page will be redirected to login.
'''
prop_imps = PropertyImpression.objects.values('imp_date').annotate(count=Count('id'))
return render(request, 'reportcontent/admin_home.html', {'prop_imps':prop_imps})
然后在模板中使用{{prop_imps}}变量时,它会给我一个PropertyImpressions列表,但是按imp_date和property分组。我需要这个只按imp_date分组,并根据values docs添加.values('imp_date'),它只是按该字段分组?
当它离开prop_imps变量中的.annotate时,它会给我一个所有imp_dates的列表,这个列表非常接近,但是当我按日期字段对它进行分组时,由于imp_date和属性而出于某种原因组。
答案 0 :(得分:2)
也许您已在PropertyImpression模型中定义了默认排序?
在这种情况下,您应该在注释之前添加 order_by()来重置它:
prop_imps = PropertyImpression.objects.values('imp_date').order_by() \
.annotate(count=Count('id'))
它是explained in Django documentation here:
在选择输出数据时,将使用在查询集的order_by()部分中提及的字段(或在模型的默认排序中使用的字段),即使它们未在值中另行指定()打电话。这些额外字段用于将“喜欢”结果组合在一起,并且它们可以使其他相同的结果行看起来是分开的。特别是在计算事物时会出现这种情况。