Moja strona Django ma model Zdjęcie, które reprezentuje zdjęcia w systemie i używam Django.contrib.comments
, aby umożliwić użytkownikom komentowanie tych. Wszystko działa dobrze, ale chciałbym rozszerzyć mój interfejs API Tastypie, aby umożliwić dostęp do komentarzy do mojego PhotoResource
przy użyciu adresu URL, takiego jak /api/v1/photo/1/comments
, gdzie 1 to identyfikator zdjęcia. Mogę sprawić, by adres URL działał dobrze, ale niezależnie od tego, jaki rodzaj filtrowania robię, zawsze wydaje mi się, że zwracam cały zestaw komentarzy, a nie tylko zestaw dla dostarczonego zdjęcia. Podaję ściętego wybór mojego aktualnego kodu API poniżej:Wracając komentarze Django do zasobu 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))
O ile mogę powiedzieć, że jest to filtr w ostatnim wierszu, który nie działa. Myślę, że jest to nieco skomplikowane ze względu na contrib.com, używając ContentTypes do linkowania do komentowanego obiektu, co wydaje mi się możliwe, że Tastypie nie może sobie z tym poradzić. Próbowałem kilku wariacji na ten temat, ale nadal nie działa. Czułem, że coś takiego będzie dział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)
, ale wszystkie komentarze zostały zwrócone.
Czy ktoś ma jakieś pomysły, jak to zrobić (a może nawet jest to możliwe)?
Czy go rozwiązać? Jeśli tak, w jaki sposób? – silviomoreto