from rest_framework.generics import ListAPIView,CreateAPIView,UpdateAPIView,RetrieveAPIView,DestroyAPIView from rest_framework.filters import BaseFilterBackend from rest_framework import serializers from rest_framework.pagination import PageNumberPagination from newapi import models class ArticleSerializer(serializers.ModelSerializer): author_name = serializers.CharField(source="author.username",required=False) class Meta: model = models.Article exclude = ['author'] class ArticleFilter(BaseFilterBackend): """ 查詢:根據URL中的cagetory參數查詢 """ def filter_queryset(self, request, queryset, view): val = request.query_params.get('cagetory') if val: return queryset.filter(category = val) return queryset class ArticleView(ListAPIView,CreateAPIView): # queryset對象 queryset = models.Article.objects.all() # 序列化 serializer_class = ArticleSerializer # 篩選規則 filter_backends = [ArticleFilter,] # 分頁 pagination_class = PageNumberPagination def perform_create(self,serializer): serializer.save(author_id=2)