2013-01-17 26 views
0

我想弄清楚如何在Django中执行下面的SQL连接语句而不诉诸于原始的SQL。有没有办法做到这一点?在Django中找不到加入语句

Select * from playertable, seasontable where player.id = season.player_id 

这是我的模型。只是为了澄清,我在上面查询中使用的缩写表名明确

class Player(models.Model): 
    name = models.CharField(max_length=200) 
    team = models.CharField(max_length=3) 
    position = models.CharField(max_length=3) 

class PlayerSeason(models.Model): 

    player = models.ForeignKey(Player) 
    year = models.IntegerField() 
    games_played = models.IntegerField() 
    goals = models.IntegerField() 
    assists = models.IntegerField() 
    points = models.IntegerField() 
    plusminus = models.CharField(max_length=200) 
    pim = models.IntegerField() 
    ppg = models.IntegerField() 
    shg = models.IntegerField() 
    gwg = models.IntegerField() 
    otg = models.IntegerField() 
    shots = models.IntegerField() 
    shooting_percentage = models.DecimalField(max_digits=5, decimal_places=2) 
    toi = models.CharField(max_length=200) 
    sftg = models.DecimalField(max_digits=5, decimal_places=2) 
    face_off = models.DecimalField(max_digits=5, decimal_places=2) 

我应该怎么做这个用的Django QuerySet

+2

你的季节模型在哪里?如果你想要一个赛季的所有球员只是做'season.player_set.all()' –

+1

你想要在一个查询中获得所有球员和所有赛季?或者你想从一个球员那里得到他们的季节? – diegueus9

+0

我想获得与某个特定球员相关的所有赛季,然后将其吹响,这样我就可以与所有球员进行比赛 – Jake

回答

1

如果你想要做的一切是为了得到一个特定季节当您使用ForeignKeyField的模型,你可以利用的Django's backwards relationships

相关联的所有玩家,在这种情况下,新赛季,这个模型实例获得一个允许您获取所有相关对象的查询集的属性。

在你的例子中,你可以使用season.player_set.all()

您可以将一个可选参数related_name传递给ForeignKeyField,允许您更改季节属性的名称。

-1

有没有办法做到这一点?

编号Django的ORM一次处理一个模型,并且您从两个表中获取列。对任一模型执行查询,然后访问相应的字段以获取相关模型。

+0

请解释你的-1。我也有这种印象,也许选民可以澄清? – dm03514