我一直有冲突。 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>
任何贡献都很受欢迎!谢谢!