Как получить pk из url в django rest framework?

У меня есть 2 приложения Ticket и Comment, с url: http://127.0.0.1:8000/api/tickets/<int:pk>/comments/<int:pk>/.

comment.views

class CommentAPIList(ListCreateAPIView):
    queryset = Comment.objects.all()
    serializer_class = CommentSerializer
    permission_classes = (IsAuthenticatedOrReadOnly,)   
    pagination_class = CommentAPIListPagination

Я хочу получить первый int:pk в моем url для фильтрации моего набора запросов, например:

queryset = Comment.objects.filter(ticket=MY_GOAL_PK)

comment.models

class Comment(models.Model):
    text = models.TextField()
    ticket = models.ForeignKey(
        Ticket,
        on_delete=models.CASCADE,
    )
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    )
    time_create = models.DateTimeField(auto_now_add=True)
    time_update = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.text

ticket.models

class Ticket(models.Model):
    title = models.CharField(max_length=150)
    text = models.TextField()
    status = models.ForeignKey(Status, on_delete=models.PROTECT, default=2)
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    )
    time_create = models.DateTimeField(auto_now_add=True)
    time_update = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title
<

Вы переопределяете метод get_queryset(…):

class CommentAPIList(ListCreateAPIView):
    queryset = Comment.objects.all()
    serializer_class = CommentSerializer
    permission_classes = (IsAuthenticatedOrReadOnly,)
    pagination_class = CommentAPIListPagination

    def get_queryset(self, *args, **kwargs):
        return (
            super()
            .get_queryset(*args, **kwargs)
            .filter(ticket_id=self.kwargs['ticket_pk'])
        )

Для пути первичный ключ билета должен иметь другое имя, например:

api/tickets/<int:ticket_pk>/comments/<int:pk>/
Вернуться на верх