I want to capture url values from a url into my views in a post request.
My urls.py looks like below
from django.urls import path from . import views as projects_views
JavaScript
x
4
1
urlpatterns = [
2
path('<str:project_id>/comments', projects_views.ProjectCommentList.as_view(), name="project_comments"),
3
]
4
and I want to capture the value project_id
in my ListCreateAPIView.
Get call works fine.
My views.py looks like below
JavaScript
1
22
22
1
class ProjectCommentList(generics.ListCreateAPIView):
2
queryset = projects_models.Comment.objects.all()
3
serializer_class = projects_serializers.CommentSerializer
4
5
6
def get(self, request, project_id=None):
7
queryset = self.filter_queryset(self.get_queryset())
8
queryset = queryset.filter(project__id=project_id)
9
10
page = self.paginate_queryset(queryset)
11
if page is not None:
12
serializer = self.get_serializer(page, many=True)
13
return self.get_paginated_response(serializer.data)
14
15
serializer = self.get_serializer(queryset, many=True)
16
return Response(serializer.data)
17
18
def perform_create(self, serializer):
19
project_id = ### Need "project_id" here
20
project = projects_models.Project.objects.get(id=data.get('project_id'))
21
serializer.save(project=project)
22
How can this be done?
Advertisement
Answer
Use self.kwargs["project_id"]
to get the project_id
in perform_create()
method,
JavaScript
1
7
1
class ProjectCommentList(generics.ListCreateAPIView):
2
3
4
def perform_create(self, serializer):
5
project_id = self.kwargs["project_id"]
6
project = projects_models.Project.objects.get(id=data.get('project_id'))
7
serializer.save(project=project)