次の django モデルから作業します。
class Position(models.Model):
# pos_list in order ('P', 'C', '1B', '2B', '3B', 'SS', 'LF', 'CF', 'RF')
# pos id / pk correspond to index value of pos_list.index(pos)
pos = models.CharField(max_length=2)
class Player(models.Model):
name = models.CharField(max_length=100)
positions = models.ManyToManyField(Position, through='PlayerPosition')
class PlayerPosition(models.Model):
player = models.ForeignKey(Player)
position = models.ForeignKey(Position)
primary = models.BooleanField()
位置 ID のリストがある場合、たとえば[3, 5]
、 wherePosition.objects.filter(id__in=[3,5])
が を生成する場合、 position_id リストまたはその他の位置の組み合わせで['1B', '3B']
フィルタリングできるようにしたいと考えています。この例では、1B (つまり) または 3B (つまり )のいずれかをプレイするすべてのプレイヤーのリストが必要です。どうすればいいですか?Player.objects.all()
[3, 5]
Position.objects.get(id=3)
Position.objects.get(id=5)
答え:
Player.objects.filter(positions__id__in=[3,5])
__id
不要なため、2番目の答え:
Player.objects.filter(positions__in=[3,5])
他のコメントは素晴らしいでしょう。ありがとう、コードを書くのに疲れた