1. ホーム
  2. django

[解決済み] DjangoはManyToManyカウントでモデルをフィルタリングしますか?

2023-07-11 09:44:50

質問

models.pyにこのようなものがあるとします。

class Hipster(models.Model):
  name = CharField(max_length=50)

class Party(models.Model):
  organiser = models.ForeignKey()
  participants = models.ManyToManyField(Profile, related_name="participants")

さて、views.pyで、0人以上の参加者がいるユーザーのパーティーを取得するクエリを実行したいと思います。

このような感じでしょうか。

user = Hipster.get(pk=1) 
hip_parties = Party.objects.filter(organiser=user, len(participants) > 0)

最適な方法は?

どのように解決するのですか?

もしこれがうまくいったら......私はこうします。

最良の方法とは、最高のパフォーマンス、最もメンテナンスしやすいなど、多くのことを意味します。 したがって、これが最善の方法であるとは言いませんが、私は、より保守しやすいと思われるので、できるだけORMの機能にこだわりたいと思います。

from django.db.models import Count

user = Hipster.objects.get(pk=1) 
hip_parties = (Party.objects.annotate(num_participants=Count('participants'))
                            .filter(organiser=user, num_participants__gt=0))