Django ManytoMany过滤具有重复项目的精确列表

时间:2018-01-10 15:02:15

标签: python django django-models

这是问题Django ManytoMany filter exact list

的扩展名

当列表包含重复项时,看起来已接受的答案不起作用。 有没有解决方案?

基本上,我将句子分成标记,并希望通过该标记进行搜索。

class Sentence(Model):
    name = CharField()

class Tokens(Model):
   token = CharField()
   sentence = ForeignKey(Sentence, related_name='tokens')

假设我有令牌['che', 'farebbe', 'dalle', 'dalle']。我想找到完全由这些代币组成的句子。

Sentence.objects.annotate(n=Count('tokens')).filter(tokens__name='che').filter(tokens__name='farebbe').filter(tokens__name='dalle').filter(n=4)

不起作用。 n超过4(我猜是因为加入)。

如果令牌列表没有重复,那么一切正常。

1 个答案:

答案 0 :(得分:0)

找到解决方案:将distinct=True添加到Count

Sentence.objects.annotate(n=Count('tokens', distinct=True)).filter(tokens__name='che').filter(tokens__name='farebbe').filter(tokens__name='dalle').filter(n=4)