【问题标题】:Djangon 2.2 filtering a single data set across pagesDjango 2.2 跨页面过滤单个数据集
【发布时间】:2021-02-10 06:46:24
【问题描述】:

在我的 django 应用程序中,我有一个主页,它在表格中显示每种类型的书籍数量,它还有一个搜索栏,允许按类型、标题或作者过滤书籍,然后将数据发布到搜索页面,并允许在表格中查看书籍条目。

在搜索结果页面上,我希望能够使用一组扩展的搜索栏进一步过滤同一组数据 - 包括原始过滤器,以及发布日期和评级等过滤器。

在扩展搜索中,我不想丢失原始搜索 - 例如,如果我在主页上搜索恐怖类型,然后希望进一步过滤以仅包含我不想要的 sesrch 页面上的高评价书籍如果我不再添加过滤器,就会丢失恐怖过滤器。

这可能吗?基本上我想知道您是否可以将不同的过滤器应用于单个视图?

提前谢谢你

【问题讨论】:

    标签: python django


    【解决方案1】:

    django 可以使用许多技术在视图之间传递参数。例如获取参数:https://stackoverflow.com/questions/150505/capturing… 或使用会话:https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Sessions

    【讨论】:

      【解决方案2】:

      所以我猜你的第一选择是为搜索做一个表单,然后用结果呈现页面。在我们讨论如何扩展它时,很高兴看到您是如何实现它的。

      没有看到您对搜索功能的实现,我认为一个很好的例子可能是将搜索从基于表单的搜索转移到查询语言。

      但我们不要超越自己!毕竟,让我们为表单做简单的方法!

      假设这是你的表单

      from django import forms
      class MyForm(forms):
         title #
         author #
         genre #
      

      现在,每次标题、作者、流派选择都会随请求一起发送。那么简单的方法就是在第二个表单中添加更多内容,并在渲染时将当前状态传递给它!

      from django import forms
      class SecondForm(forms):
         title
         author
         genre
         language # new stuff!
      

      因此,当您在函数处理程序/类视图中获取当前数据时 您可以从 MyForm 数据创建一个新表单 SecondForm,您可以阅读更多内容here

      
      def refine_search(request):
          # the form has been submitted so it's a safe assumption to have request.method == 'POSt'
          # but this will make it harder to share a link to a search page
      
          # load the search results
          # prepare the second form to be rendered on the result page
          form = SecondForm(request.POST)
          # now your can render your result page passing the form
          # and it will be rendered with the state from the previous!
      

      【讨论】:

      • 谢谢edoput。我目前没有使用表单 - 我基本上将主页中的搜索条件作为获取请求进入我的视图,然后我使用请求数据过滤查询集并将其呈现到我想要的搜索页面有额外的搜索栏允许进一步过滤。
      【解决方案3】:

      我不确定您是否想要在扩展过滤器中选择类型? 因为如果是,我看不出问题...? 如果不是,为什么不使用隐藏的输入来传递流派? forms.CharField(widget=forms.HiddenInput())

      【讨论】:

      • 感谢您的评论 - 是的,我希望将类型的选择从第一页保留到第二页。
      • 哦,那你可能想看看这个stackoverflow.com/questions/33350362/…。您应该基本上使用 django 表单作为过滤器表单和 ListView
      • 非常感谢!
      猜你喜欢
      • 2013-07-12
      • 1970-01-01
      • 2019-03-18
      • 2020-11-07
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      相关资源
      最近更新 更多