my django api view.py not showing list and creat new list

707 views Asked by At

Hello developer I'm beginner to django , im following a tutorial in which he create concrete views classes and convert them to viewset.ModelViewSet classes. and he use default router in urls.py

my app showing list of articles with viewset but not perform the post method with the ArticleViewSet(viewset.ModelViewSet) so im confused about it to use viewset This is my api/view.py file im using Concrete View Classes in which i using concrete view classses **

class ArticleListView(ListAPIView):
       queryset = Articles.objects.all()
       serializer_class = ArticleSerializer

class ArticleDetailView(RetrieveAPIView):
      queryset = Articles.objects.all()
      serializer_class = ArticleSerializer


class ArticleUpdateView(UpdateAPIView):
      queryset = Articles.objects.all()
      serializer_class = ArticleSerializer

class ArticleDeleteView(DestroyAPIView):
      queryset = Articles.objects.all()
      serializer_class = ArticleSerializer
   
class ArticleCreateView(CreateAPIView):
    permission_classes = []
    #parser_classes = (FormParser,MultiPartParser, FileUploadParser )
    serializer_class = ArticleSerializer
    queryset = Articles.objects.all()
    #serializer = ArticleSerializer(queryset, many=True)

    def post(self, request):
        serializer = ArticleSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(True, status=200)


# class ArticleViewSet(viewsets.ModelViewSet):
#     parser_classes = (FormParser,MultiPartParser, FileUploadParser )
#     serializer_class = ArticleSerializer
#     queryset = Articles.objects.all()
    

**this are my urls patterns api/url.py in Article app **

urlpatterns = [
       path('articles', ArticleListView.as_view() name=""),
       path('xyz', ArticleCreateView.as_view()),
       path('<pk>', ArticleDetailView.as_view()),
       path('<pk>/update/', ArticleUpdateView.as_view()),
       path('<pk>/delete/', ArticleDeleteView.as_view())
    ]
#from articles.api.views import  *
# from rest_framework.routers import DefaultRouter

# router = DefaultRouter()
# router.register(r'', ArticleViewSet, basename='articles')
# urlpatterns = router.urls

**These are my url patterns of urls.py in settings folder **

urlpatterns = [
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    path('rest-auth/', include('rest_auth.urls')),
    path('rest-auth/registration/', include('rest_auth.registration.urls')),
    path('admin/', admin.site.urls),
    path('accounts/', include('allauth.urls')),
    path('api/', include('articles.api.urls')),

    
    

]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

1

There are 1 answers

2
Alireza Bahrami On

I'm not sure, I did only a rapid search and your given info was not complete but I think you should define the below functions to give the functionality to your viewSet.

    """
    Example empty viewset demonstrating the standard
    actions that will be handled by a router class.

    If you're using format suffixes, make sure to also include
    the `format=None` keyword argument for each action.
    """

    def list(self, request):
        pass

    def create(self, request):
        pass

    def retrieve(self, request, pk=None):
        pass

    def update(self, request, pk=None):
        pass

    def partial_update(self, request, pk=None):
        pass

    def destroy(self, request, pk=None):
        pass

or you can write your own viewsets rather than overwriting them

class UserViewSet(viewsets.ViewSet):
    """
    A simple ViewSet for listing or retrieving users.
    """
    def list(self, request):
        queryset = User.objects.all()
        serializer = UserSerializer(queryset, many=True)
        return Response(serializer.data)

    def retrieve(self, request, pk=None):
        queryset = User.objects.all()
        user = get_object_or_404(queryset, pk=pk)
        serializer = UserSerializer(user)
        return Response(serializer.data)

fro more accurate details you can see the documentation