私にはモデルがあります:
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...)
これは、ユーザーのフィルターである必要があり、単一のフィルターパラメーターである必要があります。これは、管理ユーザーのチェンジリストをフィルタリングするためのURLクエリ文字列を作成しているためです:http://myserver/admin/auth/user/?zones=3
簡単なはずですが、私の脳は協力していません!
トマスが言ったことを言い直します。
多対多 および 多対一 テストの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])
querysets を使用する場合は、二重アンダースコア(__)構文が至る所で使用されます。
ユーザーがクエリで使用される複数のゾーンにいる場合は、おそらく.distinct()を追加する必要があることに注意してください。それ以外の場合は、1人のユーザーを複数回取得します。
users_in_zones = User.objects.filter(zones__in=[zone1, zone2, zone3]).distinct()