型号:
class Item(models.Model):
name = models.CharField(max_length=100)
# More stuff.
class Sale(models.Model):
sale_date = models.DateField(auto_now_add=True)
item = models.ForeignKey(Item)
# More stuff.
查看:
class TodaySales(ListView):
# Stuff in here.
def get_queryset(self):
sales_today = Sale.objects.filter(sale_date=date.today())
return sales_today.values('item').annotate(Count('item'))
我得到这样的东西:
[{'item': 1, 'item__count': 2}, {'item': 2, 'item__count': 1}]
这很好,但是我真正想要的是能够获得有关该项目的额外信息,例如其名称等。但我似乎无法轻易做到这一点,因为我得到的只是项目ID,所以我不能在我的模板中执行,例如,{{item.name}}。
有没有好办法呢?
答案 0 :(得分:6)
这样做。尝试:
Item.objects.filter(
sale__sale_date=date.today()
).annotate(
count = Count('sale')
)
答案 1 :(得分:3)
当您关心从Item而不是Sale中获取额外数据时,您可以查询该类:
models.Item.objects.filter(sale__sale_date=date.today()).annotate(Count('id'))
返回ORM对象,而不是values
或values_list
:您还可以使用合成id__count
属性来处理该特定项目的销售计数。
或者,如果您提前知道所需的字段,也可以在values
调用中明确命名,例如:
sales_today.values('item', 'item__name').annotate(Count('item'))