首页 > 解决方案 > Django 在 TextField 中搜索

问题描述

我正在尝试在 Django 中搜索查询,icontains查找适用于title(CharField)但不适用于content(TextField)。我想搜索查询是否存在于帖子的标题或内容中。

我用来测试查询的模型:(models.py)

class BlogPost(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=120, blank=True)
    content = models.TextField(blank=True)
    timestamp = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return '{} - {}'.format(self.title, self.user.username)

这是代码:(views.py)

from django.db.models import Q

...

class BlogPostAPIView(mixins.CreateModelMixin, generics.ListAPIView):

    ...

    def get_queryset(self):
        qs = BlogPost.objects.all()
        query = self.request.GET.get('q')
        if query is not None:
            qs = qs.filter(Q(title__icontains=query) | Q(content__icontains=query)).distinct()
        return qs

这是我在进行查询时遇到的错误:

异常类型:字段错误

异常值:TextField 的不支持查找“icontains”或不允许加入该字段。

标签: pythondjangodjango-modelsdjango-queryset

解决方案


您可以使用

结果 = Cancer.objects.filter(abstract__contains='cancer').values_list('title', 'document_id') str(results.query)

'SELECT "patents_cancer"."title", "patents_cancer"."document_id" FROM "patents_cancer" WHERE "patents_cancer"."abstract"::text LIKE %cancer%'

或者你可以使用SearchTextField Entry.objects.filter(body_text__search='Cheese')

https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/search/


推荐阅读