如何使用Djangos ORM进行左连接

时间:2017-06-10 10:33:13

标签: django python-3.x left-join

我必须遵循以下模型:

class Playlist(models.Model):
    audio_files = models.ManyToManyField(AudioFile, related_name='in_playlists',

class AudioFile(models.Model):
    listeners = models.ManyToManyField(User, related_name='listened_to', through='Progress', blank=True)

class Progress(models.Model):
    user = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE)
    lesson = models.ForeignKey(AudioFile, on_delete=models.CASCADE)
    progress = models.FloatField(default=0)

现在我想要一个Django Query,它列出了播放列表中的所有AudioFiles,但也为特定用户附加了它们的进度。在SQL中,这将是LEFT JOIN。但我确信django ORM也可以这样做。

我试过了:

playlistXYZ.audio_files.all().annotate(progress_num=models.Case(models.When(listeners__pk=1, then=models.F('listeners__progress__progress')), default=models.Value(0), output_field=models.FloatField()))

但它并没有做我想做的事。

0 个答案:

没有答案