Как обеспечить, чтобы пользователи могли только просматривать / обновлять данные, созданные ими
Я хочу создать 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 ответ
Решение
Использование get_queryset
метод в вашем представлении и фильтруйте набор запросов на основе аутентифицированного пользователя:
class BookDetails(generics.RetrieveUpdateDestroyAPIView):
serializer_class = BookSerializer
def get_queryset(self):
user = self.request.user
return Book.objects.filter(project__user=user)