假设上下文[' cat']是一个列表,它可以有多个值[' X',' Y',' Z' ]和'类别'字段也可以有多个值:[' X']或[' X,Y']。
此代码可让我获取所需的所有对象。 问题是我有400万条记录。当我在100k记录上尝试此代码时没有延迟,但有4M记录有20秒延迟。
paper_list = model1.objects.filter(reduce(operator.or_, (Q(category__icontains=x) for x in context['cat'])))
我被告知解决方案可能是在模型上使用ManyToMany关系,但即使我阅读文档ManyToMany,我也不知道如何使用。
有没有办法在没有这种结构的情况下实现这一目标?我想在MySQL上使用像LIKE表达式这样的东西,但是' icontains'我没有给我想要的东西,除非我使用for(),因为有很多记录的延迟。
如果它有任何帮助,这是我加载所有记录的模型,而且我没有更多记录:
class model1(models.Model):
author= models.CharField(max_length=200, blank=True)
title= models.CharField(max_length=200, blank=True)
sum= models.CharField(max_length=200, blank=True)
key= models.CharField(max_length=200, blank=True)
iso= models.CharField(max_length=200, blank=True)
extra= models.CharField(max_length=200, blank=True)
url= models.CharField(max_length=200, blank=True)
category= models.CharField(db_index=True, max_length=199)
有人能指出我正确的方向吗?