【问题标题】:Left join with django framework左加入 django 框架
【发布时间】:2014-07-03 03:54:52
【问题描述】:

我有这些模型:

class PartidosFifa(models.Model):
    Partido = models.IntegerField(max_length=11, default=0)
    PaisL = models.CharField(max_length=250)
    Local = models.IntegerField(max_length=11, default=0)
    Visita = models.IntegerField(max_length=11, default=0)
    PaisV = models.CharField(max_length=250)
    Resultado = models.CharField(max_length=250, default="No jugado")
    Fecha = models.DateField()
    Estadio = models.CharField(max_length=500)
    Jugado = models.CharField(max_length=5, default="No")
    def __unicode__(self):
        return unicode(self.Partido)

class PartidosUsuarios(models.Model):
    idUsuario = models.ForeignKey(User)
    idFifa = models.ForeignKey(PartidosFifa)
    idPartido = models.CharField(max_length=20)
    UPaisL = models.CharField(max_length=250)
    ULocal = models.IntegerField(max_length=11, default=0)
    UVisita = models.IntegerField(max_length=11, default=0)
    UPaisV = models.CharField(max_length=250)
    UResultado = models.CharField(max_length=250)
    Puntos = models.IntegerField(max_length=11, default=0)
    Capturado = models.CharField(max_length=10, default="No")
    def __unicode__(self):
        return unicode(self.idPartido)

我需要让 partidosFifa 表显示所有有的记录,并显示你在表 partidosUsuarios 上的结果,但在这个表中可能有也可能没有记录。在 sql 中会是这样的:

选择 PartidosFifa.PaisL, PartidosFifa.PartidosFifaV, PartidosUsuarios.ULocal, PartidosUsuarios.UVista FROM PartidosFifaLEFT JOIN PartidosUsuarios ON PartidosFifa.Partido = PartidosUsuarios.idFifa

django框架怎么写?

【问题讨论】:

    标签: django left-join django-select-related


    【解决方案1】:

    使用 Django ORM,您实际上并没有写出连接。您可以帮助它确定最有效的查询,在这种情况下,您希望使用prefetch_related,如下所示。

    partidos_fifa_set = PartidosFifa.objects.prefetch_related('partidosusuarios_set')
    

    它的作用是为每个PartidosFifa 记录获取所有记录PartidosUsuarios。要访问它,您可以按如下方式遍历它们:

    for partidos_fifa in partidos_fifa_set:
        for partidos_usuarios in partidos_fifa.partidos_usuarios_set.all():
            # Do something with partidos_usuarios
            pass
    

    这里是docs 以获取更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 2014-02-11
      • 1970-01-01
      • 2021-05-26
      • 2018-07-21
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多