Csrfmiddlewaretoken, включенный в поисковый url-запрос
Проблема в том, что у меня есть 2 поиска, один из которых - поиск соискателей для поиска работы, а другой - поиск компаний для поиска соискателей. Ожидаемый результат должен быть http://localhost:8000/search-job-seeker/?&q=searchquery
, но я получаю http://localhost:8000/search-job-seeker/?csrfmiddlewaretoken=pF6HWEH2rOTvZTRsXzaDuQ9GiGw9ChmukeCYUSND15gzFPCKWmRtRGvVecMHIWKK&q=searchquery
Я не вижу никаких сообщений об ошибках при отладке в консоли или в терминале.
Я пытался использовать get
в форме, что привело к http://localhost:8000/search-job-seeker/?csrfmiddlewaretoken=pF6HWEH2rOTvZTRsXzaDuQ9GiGw9ChmukeCYUSND15gzFPCKWmRtRGvVecMHIWKK&q=searchquery
, но когда я использую метод post
в форме, я получаю http://localhost:8000/search-job-seeker/
и результат поиска выходит без q=searchquery
в url.
Мое мнение по этому поводу таково:
class JobSeekerSearchView(LoginRequiredMixin, View):
template_name = "core/job_seeker_search.html"
form_class = JobSeekerSearchForm
def post(self, request, *args, **kwargs):
"""
Handle HTTP POST requests, process form data, search for job seekers, and render the template.
Args:
self: the instance of the class
request: the HTTP request object
*args: variable length argument list
**kwargs: variable length keyword argument list
Returns:
HTTP response object
"""
form = self.form_class(request.POST)
job_seeker_results = []
if form.is_valid():
query = form.cleaned_data["q"]
# Search for job seekers using PostgreSQL full-text search and icontains
job_seeker_results = Seeker.objects.annotate(
search=SearchVector("seekerprofile__pk", "seekerprofile__headline"),
).filter(
Q(search=SearchQuery(query))
| Q(seekerprofile__skills__icontains=query)
| Q(seekerprofile__rate__icontains=query)
)
context = {"query": query, "job_seeker_results": job_seeker_results, "form": form}
return render(request, self.template_name, context)
Форма шаблона:
<form class="d-flex" method="get" action="{% url 'core:seeker_search' %}">
{% csrf_token %}
<input class="form-control me-2" type="text" name="q" placeholder="Search job seekers..." value="{{ request.GET.q }}">
<button class="btn btn-outline-success" type="submit">Search</button>
</form>
Здесь forms.py
class JobSeekerSearchForm(forms.Form):
q = forms.CharField(max_length=100, required=False, widget=forms.TextInput(attrs={"class": "form-control"}))