簡體   English   中英

Django聚合和跟隨外鍵關系

[英]Django aggregation and following foreign key relations

楷模:

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}}。

這樣做有什么好方法嗎?

這樣做。 嘗試:

Item.objects.filter(
    sale__sale_date=date.today()
).annotate(
    count = Count('sale')
)

當您關心從Item而不是Sale中獲取額外數據時,您可以查詢該類:

models.Item.objects.filter(sale__sale_date=date.today()).annotate(Count('id'))

這將返回ORM對象,而不是valuesvalues_list :您還將具有可用於該特定項目的銷售計數的合成id__count屬性。

或者,如果您提前知道您想要哪些字段,您也可以在values調用中明確命名它們,例如:

sales_today.values('item', 'item__name').annotate(Count('item'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM