Цикл 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 %}