Suppose I have models like:
class Book(models.Model):
title = models.CharField(max_length=254)
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
class Chapter(models.Model):
title = models.CharField(max_length=254)
book = models.ForeignKey(Book, on_delete=models.CASCADE)
Suppose user A creates book. I can restrict access to the book from user B in the Book viewset by overriding get_queryset:
def get_queryset(self):
user = User.objects.get(username=self.request.user.username)
queryset = Book.objects.filter(user=user)
return queryset
I also have an endpoint for adding chapters:
class ChapterViewSet(viewsets.ModelViewSet):
queryset = Chapter.objects.all()
serializer_class = serializers.ChapterSerializer
model = Chapter
I want to prevent user B from adding (creating, POST) a chapter to a book created by user A. What is the best practice for creating this restriction?