Цикл For не работает так, как ожидалось в Django, HTML

Я пытаюсь создать строку поиска, в которой пользователь может искать определенного пользователя в базе данных. Я создал цикл for в HTML-файле search_users, но цикл не перебирает ни одного из моих пользователей. Всякий раз, когда я пытаюсь загрузить страницу, загружается первая строка ("Вы искали ..."), но все, что находится в цикле for, не загружается.

models.py

class User(AbstractUser):
    """User in a club."""
    username = models.EmailField(unique=True, blank=False)
    first_name = models.CharField(max_length=50, blank=False)
    last_name = models.CharField(max_length=50, blank=False)
    bio = models.CharField(max_length=520, blank=True)
    chess_experience = models.IntegerField(blank=False, validators = [MinValueValidator(0)])
    personal_statement = models.CharField(max_length=10000, blank=False)
    created_at = models.DateTimeField(auto_now_add=True)

views.py

def search_users(request):
   if request.method == "POST":
      searched = request.POST.get('searched',False)
      users = User.objects.filter(first_name__contains=searched)
      return render(request, 'search_users.html', {'searched': searched, 'users': users})
   else: 
      return render(request, 'search_users.html', {})

search_users.html

{% if searched %}
   <h1>You searched for {{ searched }}</h1>
   {% for user in users %}
      <a href="{% url 'show_user' user.id %}">{{ user }}</a><br/>
   {% endfor %}
{% else %}
   <h1>You forgot to search for a member...</h1>
{% endif %}

Я думаю, что не стоит использовать запрос POST для поиска

Я предлагаю вам решение на основе классов:

# view.py

class SearchResultsView(ListView):
    model = User
    template_name = 'search_users.html'

    def get_queryset(self):
        query = self.request.GET.get('q')
        search_results = User.objects.filter(
            Q(first_name__icontains=query))
        )
        return search_results
# urls.py

from django.urls import path
from .views import SearchResultsView

urlpatterns = [
    ...
    path('search/', SearchResultsView.as_view(), name='search_results'), 
    ...
]
# search_user.html

{% if search_results %}
   {% for user in search_results %}
      <a href="{% url 'show_user' user.id %}">{{ user }}</a><br/>
   {% endfor %}
{% else %}
   <h1>You forgot to search for a member...</h1>
{% endif %}
Вернуться на верх