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
urlpatterns = [
path('<str:project_id>/comments', projects_views.ProjectCommentList.as_view(), name="project_comments"),
]
and I want to capture the value project_id in my ListCreateAPIView.
Get call works fine.
My views.py looks like below
class ProjectCommentList(generics.ListCreateAPIView):
queryset = projects_models.Comment.objects.all()
serializer_class = projects_serializers.CommentSerializer
def get(self, request, project_id=None):
queryset = self.filter_queryset(self.get_queryset())
queryset = queryset.filter(project__id=project_id)
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
def perform_create(self, serializer):
project_id = ### Need "project_id" here
project = projects_models.Project.objects.get(id=data.get('project_id'))
serializer.save(project=project)
How can this be done?
Advertisement
Answer
Use self.kwargs["project_id"] to get the project_id in perform_create() method,
class ProjectCommentList(generics.ListCreateAPIView):
...
def perform_create(self, serializer):
project_id = self.kwargs["project_id"]
project = projects_models.Project.objects.get(id=data.get('project_id'))
serializer.save(project=project)