【发布时间】:2018-07-16 18:47:36
【问题描述】:
我正在尝试在 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”或不允许加入该字段。
【问题讨论】:
-
我们能看到你完整的
BlogPost模型以及里面的所有方法吗? -
使用我用来测试此查询的模型更新了问题。
-
您确定
content有内容吗?最重要的是,不建议将null=True设置为 TextField,因为None值可能被视为字符串"None"在字段中不为空 -
为什么不把模型中的字段改成CharField呢?真的没什么区别。
-
另外,您使用的是哪个数据库?
标签: python django django-models django-queryset