2017-05-03 77 views
0

我想从Django中不直接相关的模型中获取值。 我有以下型号:Django查询:从不直接相关的模型中获取值

class Platform(models.Model): 
    platform = models.CharField() 


class Game(models.Model): 
    game = models.CharField() 
    genre = models.CharField() 


class Link(models.Model): 
    game = models.ForeignKey(Game) 
    platform = models.ForeignKey(Platform) 

我怎么能得到游戏的QuerySet对象,其中游戏标题(Game.game场)将被替换到以下模式:游戏(平台)(例如“战地(PS3)”。 )没有额外的命中数据库?

在SQL它应该是这样的:

SELECT 
    g.id, 
    g.game || ' (' || p.platform || ')' AS game 
FROM game g INNER JOIN link l ON g.id = l.game_id 
    LEFT JOIN platform p ON l.platform_id = p.id; 

回答

0

您可以使用link_set获得游戏反向查找,这里的django documentation

class Platform(models.Model): 
    platform = models.CharField() 


class Game(models.Model): 
    game = models.CharField() 
    genre = models.CharField() 

    def save(self, *args, **kwargs): 
     self.title = "{0} ({1})".format(self.title, self.link__platform) 
     super(Game, self).save(*args, **kwargs) 


class Link(models.Model): 
    class Meta: 
     unique_together = ('game', 'platform') 
    game = models.ForeignKey(Game) 
    platform = models.ForeignKey(Platform) 
+0

谢谢!但是每个Game对象只需要一个相关的平台名称:例如。 QuerySet中的2项: '战地(PS3),战地(PC)' - **不** **'战场(PS3,PC)'。我怎么连接它们? – iBljad

+0

那么你需要让你链接模型unique_together,除非你打算增加额外的领域来链接你可能只是添加一个外键在游戏模型,我会更新我的答案根据你是否有额外的领域链接模型? – Pblove

相关问题