因此,我有一个代码列出了我在API中的所有帖子,并且它正在执行应做的事情。但是,用于编辑每个帖子的详细信息的代码无法正常工作。我想做的是,如果我访问要编辑的帖子的URL,则应该可以。但是由于某种原因我不能。我以为我做对了。
我试图通过URL通过其ID访问帖子。但它只列出我的所有帖子,而不列出具有匹配的post_id
或主键的帖子。
我的代码在下面。
views.py
# To retrieve and list all posts
class ListPosts(generics.ListCreateAPIView):
queryset = Posts.objects.all()
serializer_class = PostsSerializer
# To view the details of the listed posts
class DetailPosts(generics.RetrieveUpdateDestroyAPIView):
queryset = Posts.objects.all()
serializer_class = PostsSerializer
urls.py
from django.conf.urls import url, include
from . import views
urlpatterns = [
url(r'^', views.ListPosts.as_view(), name="list_posts"),
url(r'^(?P<post_id>\d+)/$',views.DetailPosts.as_view(), name="detail_posts"),
]
答案 0 :(得分:2)
要进行DetailPosts
视图的工作,必须指定一个lookup_field
,其名称与在urls.py
中配置的命名参数相同。确保该字段是一个Posts
字段,用于唯一定义
class DetailPosts(generics.RetrieveUpdateDestroyAPIView):
lookup_field = 'post_id'
queryset = Posts.objects.all()
serializer_class = PostsSerializer
我还检测到您的视图URL可以由django rest framewok工具(例如viewsets和routers)封装,因为您的视图定义了Posts
的基本CRUD。
views.py
from rest_framework import viewsets
class PostsViewSet(viewsets.ModelViewSet):
queryset = Posts.objects.all()
serializer_class = PostsSerializer
routers.py
from rest_framework import routers
from .views import PostsViewSet
router = routers.SimpleRouter()
router.register(r'posts', PostsViewSet)
urlpatterns = router.urls