寻找最流行的标签Taggit Tastypie的Django(Finding most popula

2019-09-29 07:02发布

上下文

我一直有冲突。 Currenly,我创建一个问题答案的应用程序。 每个问题都有一个标签,我想展示最热门的标签(即具有与它相关的大多数问题如标签)。

细节

我使用django-taggitTaggableManager这样做。 下面是模型的定义Question

class Question(models.Model):
    tags = TaggableManager()
    date = models.DateTimeField(default=timezone.now)
    text = models.TextField(null=True)

所以现在我有连接到问题的几个标签。

如何使一个tastypie资源来显示标签排序他们通过标签已与它相关的最多的问题?

我尝试

我真的只有在使这项工作体面一个成功的尝试。 这里是tastypie资源:

class TagResource_min(ModelResource):
     def dehydrate(self, bundle):
          bundle.data['total_questions'] len(Question.objects.filter(tags__slug=bundle.obj.slug))
          return bundle  
     class Meta:
          queryset=Tag.objects.all()

返回一个不错的JSON具有可变称为total_questions有与之相关问题的数量。 虽然是脱水后sort_by指定的请求周期的一部分在这里 ,所以我不能排序的资源total_questions 。 这里是JSON:

{

    "meta": {
        "limit": 20,
        "next": null,
        "offset": 0,
        "previous": null,
        "total_count": 13
    },
    "objects": [
        {
            "id": 1,
            "name": "testing tag",
            "resource_uri": "/full/tag/1/",
            "slug": "testing-tag",
            "total_questions": 2
        },
        ...]
}

我曾去一个不同的方式试图使另一种尝试queryset从形成Question的模型:

 queryset=Question.objects.filter(~Q(tags__slug=None)).values('tags', 'tags__slug').annotate(total_questions=Count(Tag))

这样做的问题是, filter功能将结果dict类型,而不是models.Model类型。 关键的区别是, models.Model具有属性pk这是一种类型的识别,并且dict不具有。

任何贡献大大appriciated! 谢谢!

文章来源: Finding most popular tag Taggit Tastypie Django