0

私のアプリケーションのモデルのこのやや単純化された表現を考えると、私の質問は、どのようにして世界的に最も人気のあるMyModel. つまり、それらMyModelの は によって最もお気に入りにされていMyUserます。

お気に入りのタグを見つける方法に関する同様のブログ投稿に出くわしましたが、この特定の状況には当てはまらないと思います。

class MyUser(models.Model):
  favorite_models = models.ManyToManyField(MyModel)
  ...


class MyModel(models.Model):
  name = models.CharField(...)
  ...

これは単一のクエリで実行できますか? MyUserまたは、すべてをループしてMyModel、最も人気のあるものを決定する必要がありますか? 前もって感謝します!

4

1 に答える 1

1

私は django プロジェクトを最初から作成するのが面倒ですが、これでうまくいくはずです:

from django.db.models import Count
MyModel.objects.annotate(Count('myuser'))

(またはこれ)

MyModel.objects.annotate(Count('myuser_set'))

そうでない場合は、これを試してください:

class MyUser(models.Model):
    favorite_models = models.ManyToManyField(MyModel, related_name='myuser')

その後

MyModel.objects.annotate(Count('myuser_set'))

(うまくいくかどうか教えてください。いずれにせよ、このページにはそれを行うために必要なものが含まれているはずです:https://docs.djangoproject.com/en/dev/topics/db/aggregation/

于 2013-01-01T19:48:48.920 に答える