gpt4 book ai didi

django - 为 Tastypie 资源返回 Django 评论

转载 作者:行者123 更新时间:2023-12-04 21:47:51 30 4
gpt4 key购买 nike

我的 Django 站点有一个照片模型,它代表系统中的照片,我正在使用 Django.contrib.comments允许用户评论这些。这一切正常,但我想扩展我的 Tastypie API 以允许访问我的 PhotoResource 的评论。使用类似 /api/v1/photo/1/comments 的 URL其中 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.comments 使用 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)

但再次所有评论都被退回了。

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

最佳答案

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

/api/v1/comment/?object__pk=1&content_type_id=2

关于django - 为 Tastypie 资源返回 Django 评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11294951/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com