Возвращение комментариев Джанго для ресурса Tastypie

На моем сайте Django есть фотомодель, которая представляет фотографии в системе, и я использую Django.contrib.comments чтобы позволить пользователям комментировать эти. Это все работает нормально, но я хотел бы расширить мой API Tastypie, чтобы разрешить доступ к комментариям для моего PhotoResource используя URL как /api/v1/photo/1/comments где 1 - это идентификатор фотографии. Я могу заставить 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)

но снова все комментарии были возвращены.

У кого-нибудь есть идеи как это сделать (или если это вообще возможно)?

1 ответ

Решение

Обычно вместо того, чтобы взламывать его в PhotoResource, я бы вместо этого выполнял фильтрацию в CommentResource. Вы должны включить фильтрацию для этой модели, и URL будет выглядеть так:

/ API /v1/ комментарий /? Object__pk=1&content_type_id=2

Другие вопросы по тегам