返回Django对Tastypie资源的评论

时间:2012-07-02 13:43:29

标签: django tastypie django-comments

我的Django网站有一个Photo模型,它代表系统中的照片,我正在使用Django.contrib.comments来允许用户对这些进行评论。这一切都运行正常,但我想扩展我的Tastypie API,以允许使用PhotoResource之类的网址访问/api/v1/photo/1/comments的评论,其中1是照片的ID。我能够让URL工作正常,但无论我正在做什么样的过滤,我似乎总是返回完整的注释集,而不仅仅是提供的照片集。我在下面列出了我当前代码API的精选内容:

class CommentResource(ModelResource):
    user = fields.ForeignKey(UserResource, 'user')
    class Meta:
       queryset = Comment.objects.all()
            filtering = {
                'user': ALL_WITH_RELATIONS,
            }

class PhotoResource(ModelResource):
    user = fields.ForeignKey(UserResource, 'user')  
    class Meta:
        queryset = Photo.objects.all()
        filtering = {
            'id': 'exact',
            'user': ALL_WITH_RELATIONS
        }

    def prepend_urls(self):
        return [url(r"^(?P<resource_name>%s)/(?P<pk>\w[\w/-]*)/comments%s$" % (self._meta.resource_name, trailing_slash()), self.wrap_view('get_comments'), name="api_get_comments"),
        ]

    def get_comments(self, request, **kwargs):
        try:
            obj = self.cached_obj_get(request=request, **self.remove_api_resource_names(kwargs))
        except ObjectDoesNotExist:
            return HttpGone()
        except MultipleObjectsReturned:
            return HttpMultipleChoices("More than one resource is found at this URI.")
        comment_resource = CommentResource()
        return comment_resource.get_list(request, object_pk=obj.id, content_type=ContentType.objects.get_for_model(Photo))

据我所知,最后一行中的过滤器无效。我认为这有点复杂,因为contrib.com使用ContentTypes链接到被评论的对象,我猜Tastypie可能无法应对。我已经尝试了很多变种,但它仍然无法正常工作。我觉得这样的事情很有用:

ctype = ContentType.objects.get_for_model(obj)
comment_resource = CommentResource()
return comment_resource.get_list(request, object_pk=obj.pk, content_type_id=ctype.id)

但是又回复了所有评论。

有没有人有任何想法如何做到这一点(或者甚至可能)?

1 个答案:

答案 0 :(得分:1)

通常不是将其黑客入PhotoResource,而是在CommentResource中进行过滤。您必须为该模型启用过滤,网址将如下所示:

  

/ API / V1 /评论/ object__pk = 1&安培; content_type_id = 2