Сохранение количества поисковых запросов на моделях в 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()