无法弄清楚Django中的join语句

时间:2013-01-17 16:39:24

标签: django django-models django-queryset

我正在试图弄清楚如何在Django中执行以下sql join语句而不需要仅使用原始sql。有办法吗?

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 个答案:

答案 0 :(得分:1)

如果您想做的就是让所有与特定赛季相关联的球员都可以使用Django's backwards relationships

当您将ForeignKeyField用于模型时(在本例中为Season),该模型实例将获得一个属性,该属性允许您获取所有相关对象的查询集。

在您的示例中,您可以使用season.player_set.all()

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

答案 1 :(得分:-1)

  

有办法吗?

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