Сохранение количества поисковых запросов на моделях в Django

Ниже приведен мой Django код для сохранения поисковых запросов пользователей в базе данных. Как я могу реализовать функцию, которая при многократном поиске одних и тех же ключевых слов одним и тем же пользователем должна записывать количество этих ключевых слов в базу данных, если это зарегистрированный пользователь или пользователь сессии

def get_queryset(self):
    query = self.request.GET.get('q')
    if query:
        if self.request.user.is_authenticated:
            if not search_keywords.objects.filter(user=self.request.user, search_word=query).exists():
                search_keywords.objects.create(
                    user = self.request.user,
                    search_word = query,
                    session_id = session_id
                )
        else:
            if not search_keywords.objects.filter(session_id=session_id, search_word=query).exists():
                search_keywords.objects.get_or_create(
                    session_id=session_id,
                    search_word = query,
                )

        search_vector = (
            SearchVector('title', weight='A') +
            SearchVector('description', weight='B') +
        )
        search_query = SearchQuery(query)
        return items.objects.annotate(
            rank=SearchRank(search_vector, search_query)
        ).filter(rank__gt=0.1).order_by('-rank')
    return items.objects.none()

Увеличьте счет с помощью:

from django.db.models import F


def get_queryset(self):
    query = self.request.GET.get('q')
    if query:
        if self.request.user.is_authenticated:
            search = {'user': self.request.user, 'search_word': query}
        else:
            search = {'search_word': query}
        search['session_id'] = session_id
        updated = search_keywords.objects.filter(**search).update(
            count=F('count') + 1
        )
        if not updated:
            search_keywords.objects.create(**search)
        search_vector = (
            SearchVector('title', weight='A'),
            SearchVector('description', weight='B'),
        )
        search_query = SearchQuery(query)
        return (
            items.objects.annotate(rank=SearchRank(search_vector, search_query))
            .filter(rank__gt=0.1)
            .order_by('-rank')
        )
    return items.objects.none()
Вернуться на верх