Сортировка 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 для таких случаев?