我有一个名为Article
的应用程序。我正在使用django-tagulous进行标记。我想过滤带有相同标签数量的文章。示例:
Article 1
和Article 2
具有10个标签。其中4个相同。
Article 1
和Article 3
有10个标签。其中7个相同。
在这种情况下,应返回Article 3
,因为70%的标签是相同的。
另一种情况:
Article 4
具有4个标签,Article 5
具有Article 4
的所有标签以及另外2个标签。
Article 4
具有4个标签,Article 6
具有2个标签,Article 4
和另外8个标签。
在这种情况下,应返回Article 5
。
我正在Article
上使用自定义查询集来过滤标签:
class QuerySet(QuerySet):
def tag_search(self, tags, this_article_id):
tags = [tag for tag in tags]
same = Article.objects.filter(Q(tags__in=tags))
same.exclude(id__in=[this_article_id])
same = [Article.objects.filter(id=s) for s in set(s.id for s in same)]
return same
我在Article上的对象
objects = CustomQuerySetManager()
我的CustomQuerySetManager
:
class CustomQuerySetManager(models.Manager):
"""A re-usable Manager to access a custom QuerySet"""
def __getattr__(self, attr, *args):
try:
return getattr(self.__class__, attr, *args)
except AttributeError:
# don't delegate internal methods to the queryset
if attr.startswith('__') and attr.endswith('__'):
raise
return getattr(self.get_query_set(), attr, *args)
def get_query_set(self):
return self.model.QuerySet(self.model, using=self._db)
问题:
tag_search
工作不正常,并且没有排除this_article_id
。