如何确保用户只能访问/更新他们创建的数据

时间:2018-10-24 09:48:16

标签: django django-rest-framework drf-queryset

我希望创建一个API,允许用户访问/更新仅由他们上传的图书的详细信息。用户不应具有访问/更新他人创建的图书的权限。

这是我的models.py

from django.contrib.auth.models import User

class Project(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    name = models.CharField(max_length=200)


class Book(models.Model):
    project = models.ForeignKey(Project,on_delete=models.CASCADE)
    name = models.CharField(max_length=200)
    total_pages = models.IntegerField()

这是我的serializers.py

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = "__all__"

这是我的views.py

class BookDetails(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = BookSerializer
    queryset = Book.objects.all()

如何修改views.py,使用户只能访问/更新由他创建的图书?

1 个答案:

答案 0 :(得分:0)

在您的视图中使用get_queryset方法并根据经过身份验证的用户过滤查询集:

class BookDetails(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = BookSerializer

    def get_queryset(self):
        user = self.request.user
        return Book.objects.filter(project__user=user)