私は2つのモデルを持っています:
class Game(models.Model):
title = models.CharField(max_length='255', blank=False, db_index=True)
class GameImage(models.Model):
TYPES = (
('small_image', 'Small Image'),
('medium_image', 'Medium Image'),
('feature_image', 'Feature Image'),
('subfeature_image', 'Sub-feature Image'),
('sc1', 'Screenshot 1'),
('sc2', 'Screenshot 2'),
('sc3', 'Screenshot 3'),
)
game = models.ForeignKey("Game", related_name="images", editable=False)
image = ImageField(upload_to=gameimage_storage_path, max_length=255)
type = models.CharField(max_length=16, choices=TYPES, db_index=True)
私が行った場合
games = Games.objects.prefetch_related('images').all()
私が行うと、すべての「画像」関連オブジェクトが添付されます。
games = Games.objects.prefetch_related('images').filter(images__type__contains='small_image').all()
「small_image」タイプの画像を持つゲームを表示しますが、ゲームに関連するすべての GameImage オブジェクトをロードします。
どのゲームにも type='small_image' の GameImages 関連オブジェクトのみが含まれるゲームのリストをロードするにはどうすればよいですか (ゲームに関連する他の GameImage オブジェクトはロードされません)。生のSQLでこれを行うことができますが、Django ORMでこれを行うにはどうすればよいですか? 助けてください。
アップデート。 ORM 経由で実現したい SQL クエリは次のとおりです。
SELECT * FROM game g LEFT JOIN gameimage i ON g.id = i.game_id AND i.type = 'small_image';