1. ホーム
  2. django

[解決済み] Django ManyToMany filter()

2022-04-24 16:59:33

質問

あるモデルがあります。

class Zone(models.Model):
    name = models.CharField(max_length=128)
    users = models.ManyToManyField(User, related_name='zones', null=True, blank=True)

そして、次のようなフィルタを構築する必要がある。

u = User.objects.filter(...zones contains a particular zone...)

これはUserに対するフィルタでなければならず、単一のフィルタパラメータでなければなりません。この理由は、admin user changelistをフィルタリングするためのURLクエリ文字列を構築しているからです。 http://myserver/admin/auth/user/?zones=3

簡単なことのように思えますが、私の脳は協力的ではありません

解決方法は?

Tomaszが言ったことを再掲するだけです。

の例はたくさんあります。 FOO__in=... スタイル・フィルタを 多対多 多対一 をテストします。 以下は、あなたの具体的な問題に対する構文です。

users_in_1zone = User.objects.filter(zones__id=<id1>)
# same thing but using in
users_in_1zone = User.objects.filter(zones__in=[<id1>])

# filtering on a few zones, by id
users_in_zones = User.objects.filter(zones__in=[<id1>, <id2>, <id3>])
# and by zone object (object gets converted to pk under the covers)
users_in_zones = User.objects.filter(zones__in=[zone1, zone2, zone3])

を扱うときには、ダブルアンダースコア(__)の構文があちこちで使われています。 クエリセット .