Django фильтр просмотра списка по параметру URL не работает - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь отфильтровать результат ListView через параметр URL, но он не работает. Что делает веб-приложение, так это то, что во время сеанса можно сохранить много изображений, поэтому идея заключается в том, чтобы через панель поиска можно было фильтровать сеансы и просматривать их изображения. Я попытался использовать в ListView, который использует две модели, которые связаны через внешний ключ, поиск поиска postgresql, но он не фильтрует

views.py

class SessionPictures(generic.ListView):

    model = PostSession
    template_name = 'photoadmin/gallery.html'

    def get_context_data(self, **kwargs):
        context = super(SessionPictures, self).get_context_data(**kwargs)
        context['picture'] = Images.objects.filter(
            name__session_name__search='search')
        return context

urls.py

urlpatterns = [
    path('', views.index, name='index'),
    path('upload', views.UploadView.as_view(), name='upload'),
    path('gallery/<search>/', views.SessionPictures.as_view(), name='gallery')

]

models.py

class PostSession(models.Model):
    session_name = models.CharField(max_length=25)
    created_date = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return str(self.session_name)


class Images(models.Model):
    name = models.ForeignKey(
        PostSession, related_name='images', on_delete=models.CASCADE, null=True, blank=True)
    picture = models.ImageField(upload_to='pictures')

Идея состоит в том, чтобы отфильтроватьсессий. Я не получаю сообщение об ошибке, оно просто не фильтруется.

1 Ответ

1 голос
/ 07 ноября 2019

Вы все неправильно поняли.

  1. Images.objects.filter(name__session_name__search='search') будет искать слово "поиск" в PostSession.session_name, используя полнотекстовый поиск (__search часть).
  2. Помещение поискового термина в URL gallery/<search>/' может работать, но обычно мы используем urlparams подобно gallery/?search=django
class SessionPictures(generic.ListView):

    model = PostSession
    template_name = 'photoadmin/gallery.html'

    def get_qeryset(self):
        qs = super().get_queryset()
        search_term = self.request.GET.get("search", None)
        if search_term is not None:
            <b>qs = qs.filter(session_name__icontains=search_term)</b>
        return qs
path('<b>gallery/</b>', views.SessionPictures.as_view(), name='gallery')

С такимиПри настройке вы можете просто сделать запрос:

GET gallery/?search=python

, и представление заполнит контекст именем объекта контекста postsession_list

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...