上下文
我一直有冲突。 Currenly,我创建一个问题答案的应用程序。 每个问题都有一个标签,我想展示最热门的标签(即具有与它相关的大多数问题如标签)。
细节
我使用django-taggit
的TaggableManager
这样做。 下面是模型的定义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! 谢谢!