Django, DRF: Как получить связанные посты с помощью Tag(m2m)

В настоящее время мы можем получить следующие связанные статьи по тегам.

В следующем методе баллы подсчитываются в порядке возрастания количества тегов, содержащихся в объекте.

Если найдено больше родственных объектов объекта с наивысшим баллом, то будут найдены только статьи с большим количеством тегов, а статьи с меньшим количеством тегов не будут найдены.

Есть ли другой способ?

# models.py
class Tag(models.Model):
    name = models.CharField(unique=True, max_length=100)


class Video(models.Model):
    tags = models.ManyToManyField(Tag, blank=True, db_index=True)
# views.py
class RelatedListView(generics.ListAPIView):
    serializer_class = VideoSerializer

    def get_queryset(self):
        video_pk = self.kwargs["pk"]
        tags = Video.objects.get(pk=video_pk).tags.all()

        return (
            Video.objects.annotate(score=Count("pk"))
            .exclude(pk=video_pk)
            .filter(tags__in=tags)
            .order_by("-score")
        )
Вернуться на верх