我必须遵循以下模型:
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()))
但它并没有做我想做的事。