Tôi có aa ModelViewSet
trong khung REST của Django cung cấp cho tôi khả năng để làm một POST và GET qua địa chỉ sau:Overriding Django REST của ViewSet với bài tùy chỉnh phương pháp và mô hình
api/v1/users
Những Người dùng có aa đảo ngược liên quan đến một bảng nhận xét và tôi muốn để có thể truy cập vào các nhận xét thông qua URL:
api/v1/users/<username>/comments
tôi đã có thể làm điều này bằng cách thiết lập một tùy chỉnh @detail_route
bằng cách ghi đè queryset
và và serializer_class
nhưng nó chỉ hoạt động cho các yêu cầu GET. Nếu tôi cố gắng để viết bình luận mới thông qua phần admin Khung của REST, tôi nhận được một thông báo lỗi nêu rõ "đối tượng 'ListSerializer' không Iterable"
Dưới đây là mã của tôi:
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserFlat
lookup_field = 'username'
@detail_route(methods=['post','get'])
def comment(self, request, **kwargs):
user = self.get_object()
self.queryset = Comment.objects.filter(recipient=user.id)
self.serializer_class = CommentFlat
serializer = CommentFlat(instance=self.queryset, many=True)
return Response(serializer.data)
Các bình luận mới nên các thông số sau:
comment.author, comment.message, comment.recipient
tôi có thể nhập tất cả các lĩnh vực trong bảng quản trị và cố gắng để tạo ra một yêu cầu bưu điện, nhưng nó không thành công. Lý tưởng nhất, tôi chỉ nên điền vào comment.message và comment.author và trường comment.recipient sẽ được tự động điền với user.id được lấy trong url api/v1/users/<username>/comments
Có ai biết tại sao yêu cầu bài đăng của tôi không hoàn thành và cách tôi có thể tự động điền một trường đó?