You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Django QuerySet搜索文章标题报错,寻求解决方法

问题解决步骤

1. 修正基础过滤错误

你之前的两个错误根源很明确:

  • 不能直接用Article.title.filter(...):title是模型的字段属性,不是QuerySet管理器,必须通过Article.objects这个模型管理器来调用filter方法。
  • 你的Article模型里没有name字段,要搜索文章标题的话,过滤条件应该用title__icontains,而非name__icontains。

如果只是做固定关键词的测试过滤,正确写法如下:

class SearchResultsView(ListView):
    model = Article
    template_name = 'search_results.html'
    queryset = Article.objects.filter(title__icontains='1st')

2. 实现动态用户搜索(符合实际需求)

上面的硬编码只能固定搜索"1st",要实现用户输入关键词的动态搜索,需要重写get_queryset方法来获取前端传来的搜索参数:

修改views.py:

class SearchResultsView(ListView):
    model = Article
    template_name = 'search_results.html'

    def get_queryset(self):
        # 获取前端搜索框传来的关键词(URL参数?q=xxx)
        query = self.request.GET.get('q')
        if query:
            # 过滤标题包含关键词的文章,忽略大小写
            return Article.objects.filter(title__icontains=query)
        # 无关键词时返回空结果(也可改为返回全部文章,按需调整)
        return Article.objects.none()

前端搜索表单示例(可放在导航栏或搜索页面):

<form action="{% url 'search_results' %}" method="get">
    <input type="text" name="q" placeholder="搜索文章标题...">
    <button type="submit">搜索</button>
</form>

3. 模型无缺失内容

你的Article模型字段是完整的,问题完全出在视图的QuerySet调用方式和过滤字段名错误,和模型本身没有关系。当你移除queryset代码时,ListView会使用默认逻辑返回所有Article数据,所以显示全部文章是正常的默认行为。

内容的提问来源于stack exchange,提问作者Luca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:45:41