Django 休息框架端点

如何解决Django 休息框架端点

我需要得到这个端点 /comments/int:post_id/ 我可以获取和发布评论和帖子,但我需要显示特定帖子的所有评论。我不知道如何连接它。我的代码看起来像

评论网址

urlpatterns = [
    path('',views.CommentsView.as_view()),path('<int:post_id>/',views.CreateCommentsView.as_view()),]

评论view.py

# I get all comments/
class CommentsView(ListCreateAPIView):
    queryset = Comment.objects.all()
    serializer_class = CommentSerializer

# Comments to specific post
class CreateCommentsView(ListCreateAPIView):
    queryset = Comment.objects.all()
    serializer_class = CommentSerializer
    lookup_url_kwarg = 'post_id'

     def perform_create(self,serializer):
         post = self.kwargs.get('post_id')
         post =set.get_queryset().filter(id = 'post_id')
         post.comments.add(comment)
         post = Post.objects.filter(id=self.kwargs.get('post_id'))
         serializer.save(user=self.request.user,post=post)

注释序列化器

from rest_framework import serializers
from .models import Comment
from django.contrib.auth import get_user_model
User = get_user_model()


class CommentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Comment
        fields = ['id','user','post','content','created']

class UserSimpleSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['username']

class CommentSimpleSerializer(serializers.ModelSerializer):
    user = UserSimpleSerializer()
    class Meta:
        model = Comment
        fields = ['user','created']

post.view.py

class PostList(generics.ListCreateAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer


class PostDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

class LikePost(generics.UpdateAPIView):
    permission_classes = [IsNotPostUser]
    queryset = Post.objects.all()
    serializer_class = PostSerializer

解决方法

您可以在 post_id 端点的 url 参数中传递 /comments/ 并调用 HTTP GET 方法。然后在 CommentsView 中,您需要覆盖 get_queryset 方法。您的实施将类似于

class CommentsView(ListCreateAPIView):
    serializer_class = CommentSerializer

    def get_queryset(self):
        query = self.request.query_params.get('post_id',None)
        if query is not None:
            queryset = Comment.objects.filter(post_id=post_id)
        else:
            queryset = Comment.objects.all()
       return queryset

/comments/ 端点将返回所有评论,而此 /comments/?post_id=1 端点将仅返回与指定帖子相关的评论。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?