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)参见教程,它将多个选项链接到一个问题。这确实解决了问题。我也会检查链接。谢谢