为了账号安全,请及时绑定邮箱和手机立即绑定

Django self.request 不通过查询过滤

Django self.request 不通过查询过滤

温温酱 2021-12-16 15:52:49
我试图在我的搜索模板中实现一些基本搜索,但是当我搜索时,它在 URL 中工作,但不会更改模板中的任何帖子。意见:class SearchListView(ListView):    model = Post    template_name = "public/search.html"    def get_context_data(self, **kwargs):        context = super(SearchListView, self).get_context_data(**kwargs)        context['queryset'] = Post.objects.filter(live=True)        context['category'] = Category.objects.all()        return context    def SearchListView(request):        query = self.request.GET.get("q")        if query:            queryset = queryset.filter(title_icontains=query)我不确定这是否是正确的设置方式,因为我正在观看的教程没有使用基于类的视图。HTML:<div class="container mt-5 mb-5">    <div class="banner-search-main mb-5">        <form method='GET' action=''>            <p class="text-muted">Keywords:</p>            <input type="text" name='q' class="homebanner-search" placeholder="Enter your keywords" value='{{ request.get.q }}'>            <input type="submit" value="search">        </form>    </div>    <div class="detail-container">        {% for post in queryset %}            <div class="col-sm card-container">                <a href="{% url 'post-detail' post.slug %}">                    <div class="main-card">                        <div class="main-card-img">                            <img src="https://via.placeholder.com/270x150" class="card-img-top" alt="#">                        </div>                    </div>                </a>            </div>        {% endfor %}    </div></div>例子:
查看完整描述

3 回答

?
米脂

TA贡献1836条经验 获得超3个赞

带有 get_queryset 方法的 ListView


class SearchListView(ListView):

    model = Post

    template_name = "public/search.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 queryset


    def get_context_data(self, **kwargs):

       context = super(SearchListView, self).get_context_data(**kwargs)

       context['queryset'] = self.get_queryset()

       context['category'] = Category.objects.all()

       return context


查看完整回答
反对 回复 2021-12-16
?
白板的微信

TA贡献1883条经验 获得超3个赞

首先,我建议访问这个以查看基于类的视图的基础结构。


class SearchListView(ListView):

    model = Post

    template_name = "public/search.html"

    success_url ='where you want to redirect'



    def get_queryset(self): # method that returns the queryset is `get_queryset`

       query = self.request.GET.get("q")

       if query:

        queryset = self.model.objects.filter(title__icontains=query) # double underscore not single

       return queryset


    def get_context_data(self, **kwargs):

       context = super(SearchListView, self).get_context_data(**kwargs)

       context['queryset'] = self.get_queryset()

       context['category'] = Category.objects.all()

       return context


查看完整回答
反对 回复 2021-12-16
?
慕森王

TA贡献1777条经验 获得超3个赞

您的问题是您在类中创建了一个随机函数,该函数不会覆盖任何内容。您要做的是覆盖get_queryset()。


class SearchListView(ListView):

    model = Post

    template_name = "public/search.html"


    def get_context_data(self, **kwargs):

        context = super(SearchListView, self).get_context_data(**kwargs)

        context['queryset'] = self.get_queryset()

        context['category'] = Category.objects.all()

        return context


    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 queryset


查看完整回答
反对 回复 2021-12-16
  • 3 回答
  • 0 关注
  • 266 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号