私の Django サイトには、システム内の写真を表す Photo モデルがあり、Django.contrib.comments
ユーザーがこれらにコメントできるようにするために使用しています。これはすべて正常に機能していますが、Tastypie API を拡張して、1 が写真の ID のPhotoResource
ような URL を使用してコメントにアクセスできるようにしたいと考えています。/api/v1/photo/1/comments
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)
しかし、再びすべてのコメントが返されました。
これを行う方法を知っている人はいますか (またはそれが可能かどうか)?