Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Django Rest框架的Like按钮后端逻辑_Python_Django_Django Rest Framework - Fatal编程技术网

Python 使用Django Rest框架的Like按钮后端逻辑

Python 使用Django Rest框架的Like按钮后端逻辑,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个博客应用程序,用户可以在其中添加新文章,任何用户都可以喜欢这篇文章 型号.py class Post(models.Model): title = models.CharField(max_length=60) class PostLikes(models.Model): likeusers = models.ManyToManyField(User) likepost = models.ForeignKey(Post,on_delete=models.CASC

我有一个博客应用程序,用户可以在其中添加新文章,任何用户都可以喜欢这篇文章

型号.py

class Post(models.Model):
    title = models.CharField(max_length=60)

class PostLikes(models.Model):
    likeusers = models.ManyToManyField(User)
    likepost = models.ForeignKey(Post,on_delete=models.CASCADE,null=True,related_name='likepost')

class PostSerializers(serializers.ModelSerializer):

    #likepost = serializers.SerializerMethodField() **I have to mention like count here**
    class Meta:
        model = Post
        fields = '__all__'
class PostlikeSerializer(serializers.ModelSerializer):
    class Meta:
        model = PostLikes
        fields = '__all__'
class LikeListCreate(APIView):

    def get(self,request,pk):#function to get total number of likes to particular post
        post = Post.objects.filter(pk=pk) # find which post's likes are to be extracted
        like_count = post.likepost.count()# counts total user likes ,besides my code is wrong
        serializer = PostlikeSerializer(like_count,many=True)
        return Response(serializer.data)

    def post(self,request,pk):#function to add likes to post
        # how do I check if user is already liked the post ?
        likeusers = request.user
        likepost = Post.objects.filter(pk=pk)
        serializer = PostlikeSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save(likeusers,likepost)
            return Response(serializer.data,status=status.HTTP_201_CREATED)
        return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

    path('posts/<int:pk>/like/',LikeListCreate.as_view(),name = 'post_likes'),

序列化程序.py

class Post(models.Model):
    title = models.CharField(max_length=60)

class PostLikes(models.Model):
    likeusers = models.ManyToManyField(User)
    likepost = models.ForeignKey(Post,on_delete=models.CASCADE,null=True,related_name='likepost')

class PostSerializers(serializers.ModelSerializer):

    #likepost = serializers.SerializerMethodField() **I have to mention like count here**
    class Meta:
        model = Post
        fields = '__all__'
class PostlikeSerializer(serializers.ModelSerializer):
    class Meta:
        model = PostLikes
        fields = '__all__'
class LikeListCreate(APIView):

    def get(self,request,pk):#function to get total number of likes to particular post
        post = Post.objects.filter(pk=pk) # find which post's likes are to be extracted
        like_count = post.likepost.count()# counts total user likes ,besides my code is wrong
        serializer = PostlikeSerializer(like_count,many=True)
        return Response(serializer.data)

    def post(self,request,pk):#function to add likes to post
        # how do I check if user is already liked the post ?
        likeusers = request.user
        likepost = Post.objects.filter(pk=pk)
        serializer = PostlikeSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save(likeusers,likepost)
            return Response(serializer.data,status=status.HTTP_201_CREATED)
        return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

    path('posts/<int:pk>/like/',LikeListCreate.as_view(),name = 'post_likes'),

视图.py

class Post(models.Model):
    title = models.CharField(max_length=60)

class PostLikes(models.Model):
    likeusers = models.ManyToManyField(User)
    likepost = models.ForeignKey(Post,on_delete=models.CASCADE,null=True,related_name='likepost')

class PostSerializers(serializers.ModelSerializer):

    #likepost = serializers.SerializerMethodField() **I have to mention like count here**
    class Meta:
        model = Post
        fields = '__all__'
class PostlikeSerializer(serializers.ModelSerializer):
    class Meta:
        model = PostLikes
        fields = '__all__'
class LikeListCreate(APIView):

    def get(self,request,pk):#function to get total number of likes to particular post
        post = Post.objects.filter(pk=pk) # find which post's likes are to be extracted
        like_count = post.likepost.count()# counts total user likes ,besides my code is wrong
        serializer = PostlikeSerializer(like_count,many=True)
        return Response(serializer.data)

    def post(self,request,pk):#function to add likes to post
        # how do I check if user is already liked the post ?
        likeusers = request.user
        likepost = Post.objects.filter(pk=pk)
        serializer = PostlikeSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save(likeusers,likepost)
            return Response(serializer.data,status=status.HTTP_201_CREATED)
        return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

    path('posts/<int:pk>/like/',LikeListCreate.as_view(),name = 'post_likes'),

url.py

class Post(models.Model):
    title = models.CharField(max_length=60)

class PostLikes(models.Model):
    likeusers = models.ManyToManyField(User)
    likepost = models.ForeignKey(Post,on_delete=models.CASCADE,null=True,related_name='likepost')

class PostSerializers(serializers.ModelSerializer):

    #likepost = serializers.SerializerMethodField() **I have to mention like count here**
    class Meta:
        model = Post
        fields = '__all__'
class PostlikeSerializer(serializers.ModelSerializer):
    class Meta:
        model = PostLikes
        fields = '__all__'
class LikeListCreate(APIView):

    def get(self,request,pk):#function to get total number of likes to particular post
        post = Post.objects.filter(pk=pk) # find which post's likes are to be extracted
        like_count = post.likepost.count()# counts total user likes ,besides my code is wrong
        serializer = PostlikeSerializer(like_count,many=True)
        return Response(serializer.data)

    def post(self,request,pk):#function to add likes to post
        # how do I check if user is already liked the post ?
        likeusers = request.user
        likepost = Post.objects.filter(pk=pk)
        serializer = PostlikeSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save(likeusers,likepost)
            return Response(serializer.data,status=status.HTTP_201_CREATED)
        return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

    path('posts/<int:pk>/like/',LikeListCreate.as_view(),name = 'post_likes'),

path('posts//like/',LikeListCreate.as_view(),name='post_likes'),
我也无法在views.py模块和serializers.py节中实现逻辑。请帮忙,提前谢谢


Git链接到我的项目

您正在序列化请求数据,但您已经从请求中提取了数据以获取用户和帖子,因此我建议使用该数据以标准方式在您的views.py中创建PostLike:

new_like = PostLikes(likeusers=request.user, likepost=likepost)
new_like.save()

我还要补充一点,模型通常被命名为单数项,也就是说,PostLike和not PostLikes-你可以使用ForeignKey字段的相关名称来引用postlikes。

你想在views.py模块和serializers.py部分实现什么逻辑?views.py无法保存喜欢发布的内容,并且无法检查用户是否已经被Facebook帖子中的likedIt类似于like按钮删除,任何人都只能喜欢一次帖子