使用queryset搜索后Django重定向

时间:2019-03-25 22:31:38

标签: python html django

当我单击主页上的搜索时,我希望它采用该查询集,例如(let res = { start: {}, end: {} }; [res.start.hour, res.start.minute] = [7, 20][(res.end.hour, res.end.minute)] = [ 17, 30 ]; console.log(res); ),然后在搜索视图中使用相同的URL。我曾尝试搜索,但找不到任何有效的方法。

观看次数:

http://127.0.0.1:8000/?q=car

URL:

class IndexView(ListView):
    model = Post
    # queryset = Post.objects.filter(live=True)
    template_name = "public/index.html"

    def get_queryset(self):
       queryset = super().get_queryset().filter(live=True)
       query = self.request.GET.get("q")
       if query:
        queryset = queryset.filter(title__icontains=query)
       return redirect(reverse('search-view'), queryset)

    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        context['queryset'] = self.get_queryset()
        context['category'] = Category.objects.all()
        return context

我尝试使用重定向和反向操作来执行此操作,但是它根本不起作用,实际上给我一个在使用queryset的forloop上使用slice的错误。 urlpatterns = [ path('', views.IndexView.as_view(), name="index-view"), path('post/create/', views.PostCreateView.as_view(), name="post-create"), path('post/<slug>/update/', views.PostUpdateView.as_view(), name="post-update"), path('post/<slug>/', views.PostDetailView.as_view(), name="post-detail"), path('category/', views.CategoryView.as_view(), name="category"), path('category/<int:pk>/', views.CategoryDetailView.as_view(), name="category-detail"), path('search/', views.SearchListView.as_view(), name="search-view") ]

我有2个模板/视图。当我单击主页上的搜索时,我希望它继续到搜索视图,然后在该视图上运行搜索查询。

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为您在实际执行查询的位置上混淆了一些逻辑。您不应在IndexView专用的SearchListView中进行实际的查询搜索。

根据目前可用的信息(无SearchListView),我想您可以进行重定向并将参数传递到查询url上,然后让SearchListView中的视图决定要做什么信息:

def get_queryset(self):
    queryset = super().get_queryset().filter(live=True)
    query = self.request.GET.get("q")
    if query:
        # Fetch the url for the search-view
        base_url = reverse('search-view')
        # Make the search query url encoded
        query_string =  urlencode({'q': query})
        # Tie it together with the url
        url = '{}?{}'.format(base_url, query_string)
        # Fire away
        return redirect(url)
    return redirect(reverse('search-view'), queryset)

来源The Ultimate Guide to Django Redirects

摘自Daniel Hepper的一些代码