Saving a search history on django project?
I'm working on Django project, and I have created search option. Now I'm interested to see if I can save what users are searching and I can used that to create new content. Also, I'd like to see that on admin side.
First, this is my current setup, I have views, forms and html parts.
views.py
def search(request):
form = SearchForm()
query = None
results = []
if 'query' in request.GET:
form = SearchForm(request.GET)
if form.is_valid():
query = form.cleaned_data['query']
search_vector = SearchVector('title', weight='A') + SearchVector('body', weight='B')
search_query = SearchQuery(query)
results = Lesson.published.annotate(search=search_vector,rank=SearchRank(search_vector, search_query)).filter(rank__gte=0.3).order_by('-rank')
context = {'page_title':page_title, 'form': form, 'query': query, 'results': results}
return render(request, 'pages/search.html', context)
forms.py
class SearchForm(forms.Form):
query = forms.CharField()
In order to save, I have tried to do following. I created models and updated views, but it hasn't worked as I hopped.
models.py
class MySearchQuery(models.Model):
query = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.query
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
updated views.py
def search(request):
form = SearchForm()
query = None
results = []
if 'query' in request.GET:
form = SearchForm(request.GET)
if form.is_valid():
query = form.cleaned_data['query']
search_vector = SearchVector('title', weight='A') + SearchVector('body', weight='B')
search_query = SearchQuery(query)
search_query.save()
results = Lesson.published.annotate(search=search_vector,rank=SearchRank(search_vector, search_query)).filter(rank__gte=0.3).order_by('-rank')
context = {'page_title':page_title, 'form': form, 'query': query, 'results': results}
return render(request, 'pages/search.html', context)
I got an error 'SearchQuery' object has no attribute 'save'. Not sure why it's not working, if you have any idea, please share. Thanks much!