Mi sitio de Django tiene un modelo de foto que representa fotos en el sistema y estoy usando Django.contrib.comments
para permitir que los usuarios comenten sobre estos. Todo está funcionando bien, pero me gustaría extender mi Tastypie API para permitir el acceso a los comentarios para mi PhotoResource
usando una URL como /api/v1/photo/1/comments
donde 1 es la identificación de la foto. Puedo hacer que la URL funcione bien, pero no importa qué tipo de filtrado estoy haciendo siempre parece devolver el conjunto completo de comentarios en lugar de solo el conjunto para la foto suministrada. He incluido una selección de reducir mi API de código actual a continuación:Devolución de comentarios de Django para un recurso de Tastypie
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))
Por lo que yo puedo decir que es el filtro en la última línea que no está funcionando. Creo que esto es un poco complicado debido a contrib.comments que usan ContentTypes para vincular al objeto que se comenta sobre lo que supongo que es posible que Tastypie no pueda manejar. He intentado un montón de variaciones sobre esto, pero todavía no funciona. Me sentí bastante seguro de que algo así funcionaría:
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)
pero de nuevo todos los comentarios fueron devueltos.
¿Alguien tiene alguna idea de cómo hacer esto (o si es posible)?
¿Usted lo resolvió? Si es así, ¿cómo? – silviomoreto