2017-05-03 94 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

相關問題