0

次の 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])

他のコメントは素晴らしいでしょう。ありがとう、コードを書くのに疲れた

4

1 に答える 1

3
players = Player.objects.filter(positions__pk__in=[3,5])
于 2013-10-15T21:15:13.167 に答える