寻找最受欢迎的标签Taggit Tastypie Django

时间:2016-12-26 00:04:08

标签: python django tastypie django-taggit

上下文

我一直有冲突。 Currenly,我正在创建一个问题答案应用程序。每个问题都有一个标签,我想展示最受欢迎的标签(例如与其相关的问题最多的标签)。

具体细节

我正在使用TaggableManager的{​​{1}}来执行此操作。以下是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的变量,其中包含与之关联的问题数。虽然,脱水是在指定here的请求周期的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没有。{/ p>

任何贡献都很受欢迎!谢谢!

0 个答案:

没有答案