Как добавить панель поиска через представление на основе классов - PullRequest
0 голосов
/ 07 октября 2018

Я новичок в django и пытаюсь создать простую клонированную версию [pastebin.com] [1], в которой есть только одна модель с именем и содержимым.Я создал панель поиска в моем корневом шаблоне.Но что представляет собой классическое представление для фильтрации только имени и отображения списка имени и содержимого?`

Patebin Assesment Project

  <input class="searchfield" id="searchbox" name="q" type="text" placeholder="Search"/>

  <input class="searchbutton" type="submit" value="Search"/>


</form>`

Как я уже сказал, я совсем новичок в django.Вот моя модель

from django.db import models
from django.urls import reverse

# Create your models here.
class Post(models.Model):
    name = models.CharField(db_index=True, max_length=300, blank=False)
    content = models.TextField()
    generated_url = models.CharField(db_index=True, max_length=10, blank=False)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("pastebin_app:detail",kwargs={'pk':self.pk})

1 Ответ

0 голосов
/ 07 октября 2018

Вам необходимо создать представление для обработки поведения поиска.Нет такого общего вида, но его довольно легко создать:

class SearchView(TemplateView):
    template_name = 'search.html'

    def get(self, request, *args, **kwargs):
        q = request.GET.get('q', '')
        self.results = Post.objects.filter(name__icontains=q)
        return super().get(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        return super().get_context_data(results=self.results, **kwargs)

Добавьте свой вид к вашему urls.py:

url(r'^search/$', SearchView.as_view(), name='search')

И убедитесь, что вы установили правильное значение action и method атрибуты для вашей формы поиска:

<form method="GET" action="{% url 'pastebin_app:search' %}">
...