具有标签数量的Django / Django-Tagulous过滤器

时间:2019-02-20 10:22:43

标签: python django

我有一个名为Article的应用程序。我正在使用django-tagulous进行标记。我想过滤带有相同标签数量的文章。示例:

Article 1Article 2具有10个标签。其中4个相同。 Article 1Article 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

0 个答案:

没有答案