你好我的型号如下
class Document(models.Model)
id = models.BigIntegerField(primary_key=True)
text = models.TextField()
class DocumentTags(models.Model):
name = model.CharField(max_length=256)
documents_for_tag = models.ManyToManyField(Document)
现在有了这个,我可以得到的所有标签为一个特定的文件与
parent_document = Document.objects.get(id = 1)
parent_document_tags = [x.name for x in parent_document.documenttags_set.all()]
所以parent_document_tags
将全部用于如父文档的标签。
["nice" , "unique"]
现在我想下一个获得所有Document
具有紧密匹配的标签此列表标签秒。 我这样做有
Document.objects.filter(documenttags__name__in=parent_document_tags).distinct()
然而,这一点也不逊色于在完全相同的名称文件parent_document_tags
。 我想匹配与__icontains
(或LIKE
)匹配。 如何做到这一点,不要把我的标签和一个做一个icontains类型查找一个。
对于如。
d1 has tags : "nice", "unique"
d2 has tags : "nice"
d3 has tags : "nicer"
我希望查询与返回文档D3以及LIKE
通过级联匹配“更好” __icontains
到查找documenttags__name__in
。 我能做到这一点还是我必须有一个for循环,并像下面这段代码到底过滤掉重复
related_documents_with_duplicates = []
for tag in parent_document_tags:
docs = Document.objects.filter(documenttags__name__icontains=tag).distinct()
related_documents_with_duplicates.extend(docs)
related_documents_id_unique = list(set([x.id for x in related_documents_with_duplicates]))
return Documents.objects.filter(id__in=related_documents_id_unique)