Django查询并将字段的[X]或[X,Y]值与[X,Y,Z,W等]进行比较

Django查询并将字段的[X]或[X,Y]值与[X,Y,Z,W等]进行比较,django,filter,Django,Filter,我正在尝试使用此查询获取某些记录: model.objects.all().filter(category__in=context['cat']) context['cat']是一个类别列表[X,Y,Z,W..]。但一个记录可能与其中几个记录关联: [十] 或[X,Y]或[X,Y,Z]或[X,Z] 但是,此查询只返回具有1个类别的记录,例如:[X]或[Y],而不是[X,Y] 我有这个: [item for item in model.objects.all() if any(category

我正在尝试使用此查询获取某些记录:

model.objects.all().filter(category__in=context['cat'])
context['cat']
是一个类别列表[X,Y,Z,W..]。但一个记录可能与其中几个记录关联:

[十] 或[X,Y]或[X,Y,Z]或[X,Z]

但是,此查询只返回具有1个类别的记录,例如:[X]或[Y],而不是[X,Y]

我有这个:

[item for item in model.objects.all() if any(category in item.category for category in context['cat'])]
当我将每个类别与其他类别进行比较时,这可以正确地工作并返回我想要的记录,但是执行时间太长了

在这种情况下,有没有办法使用
.filter()
和一些东西来代替

编辑:我确实尝试过使用
Q
对象,但它们没有返回结果:

paper_list = model.objects.filter(Q(category__in=context['cat']), Q(category__in=context['cat']))

丹尼尔·罗斯曼是对的。您可能应该在这里使用字段

但这种骇人的解决方案在这里可能会有所帮助:

假设您的
上下文['cat']
是一个列表,它是
['X','Y']
,那么我们可以这样做:

all_items = model.objects.none()
For catg in context['cat']:
    items = model.objects.filter(category__icontains = catg)
    all_items= all_items | items

# use all_items

我们需要更多的细节。什么是
category
字段?它是模型上的一个字段,格式为:category=models.CharField(db_index=True,max_length=200)。记录上的此类别字段的值可以是X或Y,有时也可以是X,Y。类别字段中的值为X,Y的记录在使用第一个查询postedHmm后没有给出,这似乎是错误的结构。为什么不使用一个适当的关系结构,从一个单独的存储类别的表中使用一个外键呢?我想我现在对这一部分迷茫了。我对数据库相当陌生。如果有任何帮助,模型的结构是…:class model(models.model):date=models.CharField(max_length=200,blank=True)author=models.CharField(max_length=200,blank=True)category=models.CharField(db_index=True,max_length=200)参见教程,它将多个选项链接到一个问题。这确实解决了问题。我也会检查链接。谢谢