刚开始学习django。我无法进行过滤:
views.py:
class BlogPostList(APIView):
def get(self, request, format=None):
title = request.query_params.get("title", "")
if title:
blog_posts = BlogPost.objects.filter(title_icontains=title)
else:
blog_posts = BlogPost.objects.all()
serializer = BlogPostSerializer(blog_posts, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
urls.py:
urlpatterns = [
path("blogposts/", views.BlogPostListCreate.as_view(), name="Blogpost-view-create"),
path("blogposts/<int:pk>/", views.BlogPostRetrieveUpdateDestroy.as_view(), name="update"),
path("blogposts/", views.BlogPostList.as_view(), name="Filter"),
]
前两个视图有效。 models.py:
from django.db import models
# Create your models here.
class BlogPost(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
published_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
这是完整的views.py代码:
from django.shortcuts import render
from rest_framework import generics, status
from rest_framework.response import Response
from .models import BlogPost
from .serializers import BlogPostSerializer
from rest_framework.views import APIView
# Create your views here.
class BlogPostListCreate(generics.ListCreateAPIView):
queryset = BlogPost.objects.all()
serializer_class = BlogPostSerializer
def delete(self, request, *args, **kwargs):
BlogPost.objects.all().delete()
return Response(status=status.HTTP_204_NO_CONTENT)
class BlogPostRetrieveUpdateDestroy(generics.RetrieveUpdateDestroyAPIView):
queryset = BlogPost.objects.all()
serializer_class = BlogPostSerializer
lookup_field = "pk"
class BlogPostList(APIView):
def get(self, request, format=None):
title = request.query_params.get("title", "")
if title:
blog_posts = BlogPost.objects.filter(title_icontains=title)
else:
blog_posts = BlogPost.objects.all()
serializer = BlogPostSerializer(blog_posts, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
url 配置中的第一个 (
Blockpost-view-create
) 和第三个 (Filter
) 路径是相同的。
由于 django 使用第一个匹配路径,因此它永远不会到达名为
Filter
的路径。