我有这些模特:
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框架编写?
答案 0 :(得分:1)
使用Django ORM,你实际上并没有写出连接。您可以帮助它确定最有效的查询,在这种情况下,您希望使用prefetch_related
,如下所示。
partidos_fifa_set = PartidosFifa.objects.prefetch_related('partidosusuarios_set')
这样做会为每个PartidosUsuarios
记录获取所有记录PartidosFifa
。要访问它,您可以按如下方式循环访问它们:
for partidos_fifa in partidos_fifa_set:
for partidos_usuarios in partidos_fifa.partidos_usuarios_set.all():
# Do something with partidos_usuarios
pass
以下是docs以获得更多阅读。