Увеличение счетного поля модели всякий раз, когда применяется поиск - PullRequest
0 голосов
/ 28 мая 2020

У меня есть поисковый API

   class SearchViewSet(RetrieveModelViewSet):
        serializer_class = ArticleSerializer
        queryset = Article.objects.all()
        query = self.request.query_params.get("query")

        final_queryset = search(query,queryset,#some logic)

        #logic to generate serialiser and return serialiser.data
        serialiser = self.get_serializer(final_ueryset, many=True)

search функция возвращает список статей, т.е.

   type(final_queryset) is List

И. Я также не хочу возвращать статьи order_by ('count). Теперь я не хочу увеличивать count из 3 лучших статей из final_queryset, есть ли способ сделать это.

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Выяснили, как это сделать. Просто выполните итерацию по списку и увеличьте count объектов в списке

   class SearchViewSet(RetrieveModelViewSet):
        serializer_class = ArticleSerializer
        queryset = Article.objects.all()
        query = self.request.query_params.get("query")

        final_queryset = search(query,queryset,#some logic)

        # to increment the count of top 3 entity_aliases
        for instance in final_queryset[:3]:
            instance.count += 1
            instance.save()

        #logic to generate serialiser and return serialiser.data
        serialiser = self.get_serializer(final_ueryset, many=True)
0 голосов
/ 28 мая 2020

Добавьте поле created_at в вашу модель, затем используйте это поле, чтобы найти 3 первых элемента или 3 последних элемента, подобных этому, а затем увеличьте количество

    queryset = Article.objects.order_by('-created_at')[:3] # it will return a queryset of latest 3 items
    for article in queryset:
        article.count += 1
        article.save()
    serializer = ArticleSerializer(article)

Примечание: я поделился только logi c часть здесь, и я не могу протестировать его в моем локальном, но он должен работать и помочь вам понять идею. Используйте его по своему усмотрению.

...