Djangoで食糧ログデータベースを構築していますが、クエリに関連する問題があります。Djangoの関連モデルでannotated Count()をソートする方法
消費モデルを使用して、M2Mフィールドの「消費者」を通じてUserモデルに接続されたFoodモデルを含むようにモデルを設定しました。フードモデルはフードディッシュを記述し、消費モデルはユーザーのフードの消費量(日付、量など)を表します。
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')`
しかし、これはもちろん、ユーザーに関連付けられているものだけでなく、食品のオブジェクトに関連するすべての消費オブジェクトを数えます。私のモデルを変更する必要があるのですか、それとも質問に明白なものがないのですか?
これは非常に重要な操作です(とりわけ、フロントエンドのオートコンプリートフィールドを埋めるために使用されます)。フードテーブルには数千のエントリがありますので、データベースで並べ替えを実行します終わり、強引な方法をやってやって結果を反復処理するのではなく:
Consumption.objects.filter(food=food, user=user).count()
をし、それらを並べ替えるためのpythonの並べ替えを使用しました。ユーザーベースが増えるにつれて、その方法が非常にうまくスケールされるとは思わないし、私は最初からできるように将来の証明としてデータベースを設計したいと思う。
アイデア?
の可能性のある重複した[ForeignKeyのフィールドのカウント順?](http://stackoverflow.com/questions/2501149/order-by-count-of-a-foreignkey-field) –