【问题标题】:Related Field got invalid lookup: icontains - While Search Tag相关字段查找无效:​​icontains - While Search Tag
【发布时间】:2021-08-23 10:18:55
【问题描述】:

我正在构建一个 BlogApp,我正在尝试实现一个搜索字段,该字段将使用输入的 tag 进行搜索(过滤器)。

当我尝试访问该页面时,它会一直显示

相关字段的查找无效:​​icontains

models.py

class BlogPost(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=30,default='')
    tags = TaggableManager()

views.py

from taggit.models import Tag

def search_page(request):
    query = request.GET.get('p')
    object_list = BlogPost.objects.filter(tags__icontains=query)

    context = {'posts': object_list, 'query': query}
    return render(request, 'search.html', context)

我也尝试了不同的方法,但仍然显示相同的错误。

  • 我试过.filter(tags__in=query) 然后它显示了

NoneType' 对象不可迭代

  • 我试过Tag.objects.filter(question__tags__icontains=query) 然后它显示了

相关字段的查找无效:​​icontains

任何帮助将不胜感激。提前谢谢你。

【问题讨论】:

    标签: python django django-views tags


    【解决方案1】:

    你应该指定你正在寻找标签的名称,所以:

    object_list = BlogPost.objects.filter(<strong>tags__name__icontains=query</strong>)

    只有在有查询时才应该过滤,所以:

    from taggit.models import Tag
    
    def search_page(request):
        query = request.GET.get('p')
        object_list = BlogPost.objects.all()
        if query is not None:
            object_list = object_list.filter(tags__icontains=query)
        context = {'posts': object_list, 'query': query}
        return render(request, 'search.html', context)

    您可能还想使用 q 而不是 p 作为查询参数名称。

    【讨论】:

    • 谢谢,但现在它说Cannot use None as a query value
    • @Van:你应该只过滤query不是None,如果它是None(在这种情况下如果你不使用?p=...过滤,那么它可以当然不过滤不存在​​的query
    • @Van: 可能您想使用'q' 而不是p,因此使用/?q=tagname 进行查询。
    • 当我输入标签 first , second (它们是两个不同的标签)而不是同时搜索two posts
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多