Сортировка QuerySet по полям ForeignKey после фильтрации данных в Prefetch

У нас есть две models:

class Sound(models.Model):
    folder = models.ForeignKey(SoundFolder, verbose_name=_('folder'), on_delete=models.CASCADE,
                               related_name='sounds', null=True, blank=True)
    name = models.CharField(_('name'), max_length=25, null=True, blank=True)


class SoundStats(models.Model):
    sound = models.ForeignKey(Sound, verbose_name=_('sound'), on_delete=models.CASCADE,
                              related_name='sound_stats')
    user = models.ForeignKey(User, verbose_name=_('user'), on_delete=models.CASCADE,
                             related_name='sound_stats')
    listened = models.IntegerField(_('listened'), default=0)

И есть одно view:

class SoundListCreateAPIView(generics.ListCreateAPIView):
    permission_classes = (IsAuthenticated,)
    serializer_class = SoundSerializer
    filter_backends = [Ordering]
    ordering_fields = ['sound_stats__listened']

    def get_queryset(self):
        queryset = Sound.objects.filter(folder=self.kwargs.get("folder")).prefetch_related(
            Prefetch('sound_stats', queryset=SoundStats.objects.filter(user=self.request.user)))
        return queryset

Проблема заключается в том, что Ordering по полю listened работает не правильно с данными отфильтрованными в Prefetch(будут всегда передавать только один объект SoundStats), если к один с объектов Sound есть >1 привязанных объектов SoundStats с разными user. Как правильно использовать Ordering для таких случаев?

Вернуться на верх