Trang web Django của tôi có một mô hình Ảnh đại diện cho ảnh trong hệ thống và tôi đang sử dụng Django.contrib.comments
để cho phép người dùng nhận xét về những điều này. Đây là tất cả làm việc tốt nhưng tôi muốn mở rộng Tastypie API của tôi để cho phép truy cập các ý kiến cho PhotoResource
của tôi bằng cách sử dụng một URL như /api/v1/photo/1/comments
trong đó 1 là id của bức ảnh. Tôi có thể làm cho URL hoạt động tốt nhưng không có vấn đề gì về loại lọc tôi đang làm tôi luôn luôn dường như trả lại bộ hoàn chỉnh các ý kiến chứ không chỉ là tập hợp cho ảnh được cung cấp. Tôi đã bao gồm lựa chọn cắt giảm mã API hiện tại của mình bên dưới:Trả lại nhận xét Django cho tài nguyên 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))
Theo tôi có thể nói đó là bộ lọc ở dòng cuối cùng không hoạt động. Tôi nghĩ điều này hơi phức tạp do contrib.com sử dụng ContentTypes để liên kết với đối tượng đang được nhận xét mà tôi đoán Tastypie có thể không đương đầu được. Tôi đã thử một loạt các biến thể về điều này nhưng nó vẫn không hoạt động. Tôi cảm thấy khá chắc chắn điều gì đó như thế này sẽ hoạt động:
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)
nhưng một lần nữa tất cả các nhận xét đã được trả lại.
Có ai có bất kỳ ý tưởng nào về cách thực hiện điều này (hoặc nếu nó thậm chí có thể)?
Bạn có giải quyết nó? Nếu có, làm thế nào? – silviomoreto