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")
)