Django rest как разместить комментарии в блоге записи

Я хотел бы узнать, как удалить комментарии на форуме, используя url, подобный этому:

DELETE /api/boards/{board_id}/comments/{comment_id}

В настоящее время я могу перечислить все комментарии и разместить комментарий, используя следующее:

GET /api/boards/{board_id}/comments # will get all comments

POST /api/boards/{board_id}/comments # will create a comment.

Я не знаю, как получить один комментарий и не знаю, как удалить комментарий с помощью дополнительного действия ниже

вот мой текущий взгляд:

    class BoardViewSet(ModelViewSet):
    queryset = Board.objects.exclude(deleted=True)
    serializer_class = BoardSerializerList
    permission_classes = [permissions.IsAuthenticatedOrReadOnly,
                          IsOwnerOrReadOnly]

    def destroy(self, request: Request, *args, **kwargs) -> Response:
        board = self.get_object()
        if not board.deleted:
            board.deleted = True
            board.save()
            return Response(status=status.HTTP_204_NO_CONTENT)
        return Response(status=status.HTTP_400_BAD_REQUEST)

    def get_serializer_class(self):
        if self.action == 'retrieve':
            return BoardSerializerRetrieve

        return super().get_serializer_class()

    @action(detail=True, methods=['get', 'post', 'delete'], serializer_class=CommentSerializer)
    def comments(self, request, pk=None):
        if self.request.method == 'GET':
            board = self.get_object()
            comments = board.comment_set.all()
            serializer = CommentSerializer(comments, many=True)

            return Response(serializer.data)

        if self.request.method == 'POST':
            board = self.get_object()
            serializer = CommentSerializer(data=request.data)
            if serializer.is_valid():
                user = serializer.data['user']
                text = serializer.data['text']
                Comment.objects.create(board=board, user=user, text=text)

                return Response(status=status.HTTP_201_CREATED)

вот мои модели:

class Board(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=200, blank=False, null=False)
    description = models.TextField(max_length=1000)
    share_with_company = models.BooleanField()
    share_list = ArrayField(models.CharField(max_length=15), null=True, blank=True)
    last_update = models.DateTimeField(auto_now=True)
    owner = models.ForeignKey('auth.User', related_name='boards', on_delete=models.CASCADE)
    deleted = models.BooleanField(default=False)
    history = HistoricalRecords()


class Comment(models.Model):
    board = models.ForeignKey(Board, on_delete=models.CASCADE, null=False, blank=False)
    user = models.CharField(max_length=200)
    created = models.DateTimeField(auto_now_add=True)
    text = models.TextField(max_length=1000

Ниже приведены мои текущие URL:

from .views import BoardViewSet, CommentViewSet, CardViewSet, UserList, UserDetail

router = DefaultRouter()
router.register(r'boards', BoardViewSet, basename='boards')
router.register(r'comments', CommentViewSet, basename='comments')
router.register(r'cards', CardViewSet, basename='cards')


urlpatterns = []

Удалите комментарий, указав его id. Идентификатор форума не нужен, потому что каждый комментарий уникален и имеет свой собственный идентификатор.

def destroy(self, request,id=None):
        comment = Comment.objects.get(id=id)
        if not comment.deleted:
            comment.deleted = True
            comment.save()
            return Response(status=status.HTTP_204_NO_CONTENT)
        return Response(status=status.HTTP_400_BAD_REQUEST)
Вернуться на верх