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!

Back to Top