2015-11-12 42 views
0

假設我有一家水果店。我出售蘋果,香蕉和其他水果。Django通過最高出現日期總計對象數據

有時我會在一個小時內賣出幾件物品,有時甚至沒有。

我想知道我賣哪個日期最蘋果,有多少我的那一天賣...

(我使用一個sqlite3的數據庫和Django 1.5)

我的模型看起來像:

class fruitsales(models.Model): 
    fruit = models.CharField(max_length=128, unique=False) 
    num_sold = models.IntegerField(default=0) 
    date = models.DateField() 

    def __unicode__(self): 
      return self.fruit 

一個詳盡的數據集可能看起來像:

fruit = "apple", num_sold = 3, date = 01/01/2015 
fruit = "apple", num_sold = 5, date = 01/01/2015 
fruit = "banana", num_sold = 24, date = 01/01/2015 
fruit = "apple", num_sold = 6, date = 02/01/2015 

我CUR在我的views.py中做這樣的事情:

fruit = fruitData.objects.filter(fruitName=fruit***This is from the url and would in this 
instance be:"apple"***).values('fruit').annotate(total_Sold=Sum('num_sold')) 

This returns;蘋果,14,02/01/2015。而我希望;蘋果,8,01/01/2015

謝謝:D

回答

0

我認爲這可以幫助你。 此代碼是沒有測試

試試這個:

fruitData.objects.filter(...).values('date').distinct().annotate(total_sold=Sum('num_sold')).values('fruit', 'total_sold') 
+0

這讓我相當長的一段路,它聚合所有類型的水果,每天售出,所以在我們的例子中,它給蘋果,8 ,01/01/2015和蘋果,6 02/01/2015。所以對於完整的查詢,我想我們最後需要一個過濾器。不幸的是,在最後導致一個錯誤:.order_by(' - mentions')[:1]感謝您的協助Gocht! – William

+0

@William我想是因爲與價值觀,你有一本字典,而不是一個查詢集,給你一個錯誤,請嘗試刪除最後一個值。 – Gocht

+0

謝謝@Gocht,我的道歉卻不打算把這個問題更清楚,但是這就是我掙扎着開始 - 因此這個問題;) – William

0
fruit = fruitData.objects.filter(fruitName='apple') \ 
         .values('fruit', 'date') \ 
         .annotate(total_sold=Sum('num_sold')) 
+0

這很好,幾乎讓我在那裏(給出每天聚合銷售)。可悲的是,它不會返回最高的日期,而是所有的日期。我努力將結果限制在最大值。 – William

+0

抱歉,沒有仔細閱讀您的帖子,如果您將'Sum'改爲'Max'?你需要'從django.db.models導入Max'。 –

+0

它看起來像這回每天售出(給定果)的最大數量,因此而不是隻返回一個行:從8賣「蘋果」,2015年1月1日,*** ***。它返回兩行:「蘋果」,01/01/2015,***從5出售***和「蘋果」,02/01/2015,***從6出售*** – William