Django 过滤和删除

2 投票
1 回答
2037 浏览
提问于 2025-04-18 07:03

我有一个 modelViewSet

class LikeViewSet(viewsets.ModelViewSet):
    queryset = Likes.objects.all()
    serializer_class = LikeSerializer
    filter_fields = ('user','post')

    def delete(self, request, pk, format=None):
        post = Likes.objects.get(pk=pk)
        post.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

我想通过这样的 URL 进行过滤:

http://localhost:8000/likes/?user=anon&post=1

然后删除我从 Django 得到的那个特定结果,但 Django 总是给我

delete() takes at least 3 arguments (2 given)

我真的搞不清楚为什么。有人能帮忙吗?谢谢!我在使用 Django Rest Framework

编辑:这是 LikeViewSet 的模型:

class Likes(models.Model):
    user = models.ForeignKey(Profile, related_name='liker')
    post = models.ForeignKey(Post, related_name='   post' )
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ('created',)

这个模型的想法是,它是用户模型和帖子模型之间关系的模型表,所以过滤必须以这种方式在 URL 中进行

1 个回答

0

当你使用一个 ViewSet 时,应该用 destroy() 方法,而不是 delete()

你可以在这里查看文档 这里

ViewSet 类其实就是一种基于类的视图,但它不提供像 .get() 或 .post() 这样的处理方法,而是提供一些动作,比如 .list() 和 .create()。

根据你的代码,看起来你在 destroy/delete 方法里没有做什么特别的事情。你是否可以直接使用默认的 destroy 函数呢?

撰写回答