Для цикла, не работающего должным образом в Django, HTML

#html #django #loops #templates #model

#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 %}  lt;h1gt;You searched for {{ searched }}lt;/h1gt;  {% for user in users %}  lt;a href="{% url 'show_user' user.id %}"gt;{{ user }}lt;/agt;lt;br/gt;  {% endfor %} {% else %}  lt;h1gt;You forgot to search for a member...lt;/h1gt; {% endif %}  

Ответ №1:

Я думаю, что вам не следует использовать 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 %}  lt;a href="{% url 'show_user' user.id %}"gt;{{ user }}lt;/agt;lt;br/gt;  {% endfor %} {% else %}  lt;h1gt;You forgot to search for a member...lt;/h1gt; {% endif %}