#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 %}