我建立在Django食物日誌數據庫相關模型進行排序和我有一個查詢相關的問題。如何通過註解COUNT()在Django的
我已經設置了我的模型,包括(除其他事項外),通過消費模型通過M2M場「消費者」連接到用戶模型中的食品模型。食品模型描述小菜和消費模型描述食品(日期,金額等)的用戶的消費。
class Food(models.Model):
food_name = models.CharField(max_length=30)
consumer = models.ManyToManyField("User", through=Consumption)
class Consumption(models.Model):
food = models.ForeignKey("Food")
user = models.ForeignKey("User")
我希望創建一個返回該食品對象出現在消費表用戶(次用戶消費的食品數量)的次數下令所有食品對象的查詢。
我想東西線:
Food.objects.all().annotate(consumption_times = Count(consumer)).order_by('consumption_times')`
但是這當然算有關食品的對象,不只是與用戶相關聯的那些所有的消費對象。我是否需要更改我的模型,或者我只是錯過了查詢中顯而易見的事情?
這是一個相當耗時的操作(其中包括用於填充前端的自動填充字段),而Food表有幾千個條目,所以我寧願在數據庫中進行排序結束,而不是使用暴力方法並迭代結果:
Consumption.objects.filter(food=food, user=user).count()
然後使用python sort對它們進行排序。我不認爲這方法將很好地進行縮放隨着用戶基數增大,我想數據庫,我可以從一開始就設計爲面向未來。
任何想法?
的可能的複製[由一個ForeignKey字段的計數盤?(http://stackoverflow.com/questions/2501149/order-by-count-of-a-foreignkey-field) –