这是问题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
(我猜是因为加入)。
如果令牌列表没有重复,那么一切正常。
答案 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)