我有这些模型:
class Region(models.Model):
region_name = models.CharField(max_length=64)
def __str__(self):
return self.region_name
class GameRegionRelease(models.Model):
region = models.ForeignKey(
Region,
on_delete=models.CASCADE,
verbose_name='region'
)
game = models.ForeignKey(
Game,
on_delete=models.CASCADE,
verbose_name='game'
)
release_date = models.DateField(
verbose_name='release date',
default=None
)
class Game(models.Model):
game_name = models.CharField(max_length=512)
release_dates = models.ManyToManyField(
Region,
related_name='game_release_dates',
through='GameRegionRelease'
)
我想要获得的是每个游戏列出的每个区域,即使没有该游戏的区域数据。因此,结果将是游戏X区域,可在可用的GamereGionRelease填充区域数据。我想要类似于以下产生的东西:
SELECT *
FROM gameslist_region gr
CROSS JOIN gameslist_game gg
LEFT JOIN gameslist_gameregionrelease grr
ON gg.game_name = grr.game_id
AND gr.region_name = grr.region_id;
,但我不知道如何使用本机ORM构造在Django中表达这一点。这可能吗?我正在使用Python 3.6.4和Django 2.0.2。
##获取GamereGionRease的所有对象game_region_release = gamereGionRelease.objects.all((##访问game_namegame_region_release.game.game_name##访问region_namegame_region_release.gregion.gregion_name